一,抽象方法和抽象类的概念
概念:当子类的共性方法抽取到父类中,而父类无法描述每个子类的具体行为时,就应该将这个方法定义成抽象方法。
关键字:abstract
抽象方法的定义格式:
范围修饰符 abstract 返回类型 方法名(参数);
抽象方法必须在抽象类中,所以必须将抽象方法所在的类定义成抽象类。
二,抽象类和抽象方法的使用
抽象类一定是一个父类,因为抽象类是向上抽象形成的。
那么子类中也就存在了从父类中继承下来的抽象方法。
此时子类要么也是一个抽象类,要么重写父类中的所有抽象方法。
(子类如果不重写父类中的所有抽象方法,那么这个子类也是一个抽象类)
抽象类的使用步骤:
- 创建子类继承抽象类
- 重写所有抽象方法
- 创建子类对象调用方法
三,注意事项
抽象类不能创建对象(不能实例化,不能new)
原因:如果创建了抽象类的对象,就可以调用抽象的方法,而调用抽象方法没有意义。
抽象类中可以有非抽象方法,为子类提供共性方法
抽象类中可以有构造函数
抽象类一定是一个父类
抽象类中可以没有抽象方法
四,匿名对象
概念:创建对象不指定对象的引用变量名
好处:书写简便
弊端:
- 可读性差
- 只能使用一次
五,匿名内部类
概念:使用匿名的方式创建一个抽象类的子类对象
格式:
new 抽象类(){ 重写方法 };
abstract class Animal{ public abstract void eat(); } // 创建匿名内部类 new Animal(){ public void eat(){ //... } };
注:
- 匿名内部类中不能写构造函数,因为没有类名
- 普通类也可以有匿名内部类,但是不推荐
- 匿名内部类创建出的对象可以通过多态使用父类的引用变量接收(后面讲)