4.抽象类

一. 抽象方法和抽象类

  1. 一般的:习惯把abstract写在最前面。

  2. 使用abstract修饰且没有方法体的方法称为抽象方法。
    特点:

    1. 使用抽象abstract修饰,方法没有方法体,留给子类去实现/覆盖
    2. 抽象方法修饰符不能是private和final以及static。
    3. 抽象方法必须定义在抽象类或接口中
  3. 使用abstract修饰的类:
    特点:

    1. 不能创建实例即不能new一个抽象类,即使创建出抽象类对象,调用抽象方法,根本没有方法体。
    2. 可以不包含抽象方法,若一旦包含,该类必须作为抽象类,抽象类可以包含普通方法(留给子类
      调用)
      ,抽象类是有构造器的,子类构造器必须先调用父类构造器。
    3. 若子类没有实现/覆盖父类所有的抽象方法,那么子类也得作为抽象类(抽象派生类)
    4. 构造方法不能都定义成私有的,否则不能有子类(创建子类对象前先调用父类构造方法)
    5. 抽象类不能使用final修饰,因为必须有子类,抽象方法才能得以实现。
    6. 是不完整的类,需做为父类(必须要有子类),功能才能得以实现。
  4. 抽象类中可以不存在抽象方法,防止外界创建对象。

  5. 抽象类和普通类的区别:
    普通类有的成员(方法,字段,构造器)抽象类都有,只是不能创建对象,可以包含抽象方法。

新建AbstractDemo.java

//抽象方法的Demo
//图形
abstract class Graph
{
	abstract Double area();
}
//圆
class Circle extends Graph
{
	private Double r;
	Circle(Double r){
		this.r = r;
	}
	Double area(){
		return 3.14 * r * r;
	}
}
//矩形
class Rectangle extends Graph
{
	private Double x;
	private Double y;
	Rectangle(Double x,Double y){
		this.x = x;
		this.y = y;
	}
	Double area(){
		return x * y;
	}
}
//三角形
class Triangle extends Graph
{
	private Double a;
	private Double b;
	private Double c;
	Triangle(Double a,Double b,Double c){
		this.a = a;
		this.b = b;
		this.c = c;
	}
	Double area(){
		Double p = (a + b + c) / 2.0;
		return Math.sqrt(p*(p - a)*(p - b)*(p - c));
	}
}
class AbstractDemo 
{
	public static void main(String[] args) 
	{
		System.out.println(new Circle(Double.valueOf(10)).area());
		System.out.println(new Rectangle(Double.valueOf(10),Double.valueOf(10)).area());
		System.out.println(new Triangle(Double.valueOf(3),Double.valueOf(4),Double.valueOf(5)).area());

	}
}
发布了58 篇原创文章 · 获赞 0 · 访问量 733

猜你喜欢

转载自blog.csdn.net/huang_kuh/article/details/104862776