抽象类与抽象方法
随着继承层次中一个个新子类的定义,类变得越来越具体,而父类更一般,更通用。类的设计应该保持父类和子类能共享特性。有时将父类设计的
非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
abstract关键字的使用:
1、abstract可以修饰的结构:类、方法
2、abstract修饰类:
①此类不可实例化
②抽象类中一定有构造器,便于子类实例化时调用(涉及:子类实例化的全过程)
③开发中都会提供抽象类的子类,让子类对象实例化,完成相关操作
3、abstract修饰方法:例:
public void abstract eat();
①抽象方法只有方法的声明,没有方法体
②包含抽象方法的类,一定是一个抽象类
③若子类中重写了父类所有的抽象方法后,此子类方可实例化
若子类中没有重写父类中(包括间接父类)所有的抽象方法,则此子类也是一个抽象类,需要用abstract修饰
abstract使用的注意点:
1、abstract不能用来修饰:属性、构造器等结构
2、abstract不能用来修饰私有方法、静态方法、final的方法、final的类
匿名对象和抽象类的匿名子类对象:例:
public static void mian(String[] args){
method(new Student( ) );//匿名对象
Worker worker=new Worker();
method1(worker);//非匿名的类非匿名的对象
method1(new Worker( ) );//非匿名的匿名的对象
//创建了一匿名子类的对象:p
Person p=new Person(){
public void eat(){
}
public void breath(){
}
}
}
public static void method1(Person p){
p.eat();
p.walk();
}
public static void method(Student s){
}