1. 抽象方法
1.1 特征
1.1.1 使用abstract修饰,方法内没有方法体,留给子类实现
1.1.2 抽象方法修饰符不能是private, final 以及static修饰,因为抽象方法的设计初衷是希望子类复写(实现),来实现多态
若使用private修饰符,子类无法复写。final修饰符修饰方法也表明方法该方法为最终方法,无法复写。static是类级
级别的。
1.1.3 抽象方法必须在抽象类中
abstract class Animal {
//static abstract void roar1();--编译报错
//private abstract void roar2();--编译报错
//final abstract void roar3();--编译报错
}
2. 抽象类
2.1 特征
2.1.1 使用abstract修饰符修饰
2.1.2 不能使用new创建实例对象,但是抽象类有构造器,在实例化子类对象时也会执行抽象类的构造器,可以继承非抽象 类,是Object的子类
class Living{
public Living(){
System.out.println("执行抽象类Animal的父类Living构造器");
}
}
abstract class Animal extends Living{
public Animal(){
System.out.println("执行抽象类Animal构造器");
}
}
class Dog extends Animal{
public Dog(){
System.out.println("执行子类Dog构造器");
}
}
public class AbstractDemo {
@Test
public void testAbstractClassConstructor(){
new Dog();
}
}
执行结果:
执行抽象类Animal的父类Living构造器
执行抽象类Animal构造器
执行子类Dog构造器
可见,在实例化抽象类Animal的子类Dog时,先调用了抽象类父类Living的默认无参构造器,接着调用了抽象类Animal的构造器,最后执行子类Dog的构造器。
2.1.3 抽象类中可以没有抽象方法,但抽象方法所在的类必须时抽象类
2.1.4 抽象类需要有子类(抽象类的设计理念),用以实现抽象类的抽象方法;若子类没有实现/复写父类的所有抽象方法,那么 子类也必须作为抽象类出现
2.1.5 抽象类的构造器不能都定义成私有的,否则就不能有子类了
2.1.6 同样的,抽象类也不能用final修饰符,否则就不能有子类了