abstract关键字: 抽象的
只能用来修饰类或方法
1.用来修饰类:
被修饰的类称为抽象类,可能包含抽象方法,也可能不包含抽象方法
①此类不能被实例化,即不能创建对象(因为其中包含抽象方法),其他功能与类相同
②抽象类中一定有构造器,便于子类实例化时调用
③开发中,提供抽象类的子类,让子类对象实例化,完成相关操作
④抽象类一般位于体系结构的上层,用来定义功能
注意:
如果一个类继承了抽象类,那么这个类要么重写抽象类中所有的抽象方法,要么将此类也抽象化
2.用来修饰方法:
被修饰的方法称为抽象方法
①抽象方法只有方法的声明,没有方法体(在一些比较顶层的类中,它的方法实现与子类大多不同,此时没必要在顶层实现具体的方法,只需声明功能即可)
②包含抽象方法的类一定是一个抽象类;反之,抽象类中可无方法体
③若子类重写父类中所有的抽象方法,则子类才可实例化
若未重写所有的,则此子类也是一个抽象类,需要用abstract修饰
注意:
①abstract不能用来修饰属性,方法
②abstract不能用来修饰: 私有方法,静态方法,final修饰的方法,final修饰的类
抽象类的匿名子类:
①
method(new Student()); //匿名对象
②
Worker worker = new worker();
method1(worker); //非匿名类的非匿名对象
③
method2(new Worker()); //非匿名类的匿名对象
④
Person p = new person(){ //创建一匿名子类的对象:p
@Override //表明此为子类重写父类的方法
public void eat(){
System.out.println("动物吃东西");
}
@Override
public void breath(){
System.out.println("动物呼吸");
}
}
⑤
method3(new person(){ //创建匿名子类的匿名对象
@Override
public void eat(){
System.out.println("动物吃东西");
}
}