抽象类通常用来作为一个类族的最顶层的父类,用最底层的类表示现实中的具体事物,用最顶层的类表示该类族所有的事物的共性。
抽象方法:
1、在定义Java方法时可以只给出方法头,而不给出方法内部实现代码,这种的方法称为抽象方法;
2、凡是没有方法体的方法必须用关键字abstract修饰为抽象方法;
3、凡是含有抽象方法的类必须声明为抽象类。
抽象类:
1、用abstract关键字修饰一个类时,该类叫做抽象类;
2、包含抽象方法的类必须声明为抽象类,但是一个抽象类中可以不包含任何抽象方法;
3、抽象类不一定有抽象方法,有抽象方法的一定是抽象类。
abstract class A //如果f方法没有方法体,则必须的在class前加 abstract 如果f方法含有方法体,则class前面可加也可不加abstract ,因为“一个抽象类中是可以不包含任何抽象方法” { private int i; public abstract void f(); //如果f方法没有方法体,则f方法必须的声明为抽象方法,即必须的在前面加abstract } class TestAbsClass_1 { public static void main(String[] args) { System.out.println("今天我很高兴!"); } }
抽象类实现多态:
不能new出抽象类对象,但可以定义一个抽象类的引用。
例如,假设A是抽象类,B是A的子类且完全实现了A 的所有抽象方法,则:
A aa = new A(); //error A aa = new B(); //OK我们可以把一个子类对象的地址赋给抽象类的引用,然后通过抽象类的引用调用子类从父类继承过来的方法,即抽象类也可以实现多态。
abstract class A { public abstract void f(); } class B extends A { public void f() { System.out.println("哈哈"); } } public class TestAbs_1 { public static void main(String[] args) { //A aa1 = new A(); //error A aa2 = null; //可以定义一个抽象类的引用 aa2 = new B(); //将子类对象的地址赋给抽象类的引用 aa2.f(); //用抽象类的引用访问子类的方法 这就是多态 } }