抽象类
抽象类相对于普通类只多了一些抽象方法的定义。
抽象类必须要有子类所继承。
抽象类的子类必须要覆写抽象类中的所有抽象方法。
抽象类不能直接实例化,必须依靠子类来完成,采用向上转型的方式来完成。
抽象类一定有构造方法。
抽象类不能使用 final 定义。
外部抽象类不能使用 static 声明,而内部抽象类可以,使用 static 声明的内部抽象类相当于外部抽象类。继承的时候使用“外部类.内部类”来表示类名称。
抽象类的最大问题:单继承局限。
package com.company;
//创建一个抽象类
abstract class A{
//static 定义的内部类相当于外部类
static abstract class B{
public abstract void print();
}
}
//创建子类
class C extends A.B{
public void print(){
System.out.println("HelloWord");
}
}
//主类
public class Main {
public static void main(String[] args) {
//实例化
A.B ab = new C(); //向上转型
ab.print();
}
}
package com.company;
//创建一个抽象类
abstract class A{
public A(){
this.print(); // 2: 执行构造,调用 print() 方法
}
public abstract void print();
}
//创建子类
class B extends A{
private int num;
public B(int num){
this.num = num;
}
public void print(){ // 3: 执行覆写后 print() 方法
System.out.println(num); // 4: num 还没有初始化,默认值为0
}
}
//主类
public class Main {
public static void main(String[] args) {
//实例化
A a = new B(30); //向上转型 // 1: 执行构造,父类先构造。
a.print(); //此时子类已经初始化。
}
}