抽象类
1. 抽象类与抽象方法:
- 抽象类是指在普通类的结构里面增加抽象方法的组成部分。
- 抽象类用来描述一个类型具备的基本特征和功能,具体的实现方式以及细节由子类去重写实现
- 抽象方法是只声明了方法,但没有方法体的方法
- 抽象方法只能出现在抽象类中,但抽象类中可以存在其他普通方法
- 抽象类无法创建对象,只能被子类继承后,创建子类对象
- 子类必须重写父类中的所有抽象方法,若子类没有重写父类中的所有方法,则子类也必须定义为抽象类
2. 注意点:
- 由于抽象类中也有一些属性,所以抽象类中也有构造器,存在目的是为了属性的初始化,子类实例化时,先执行父类构造器,再执行子类构造器
- 抽象类不能用final声明,因为抽象类必须有子类,而final类型的类不能被继承
- 外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称
代码示例:
- 使用static声明外部抽象类,报错
package oop.Demo07;
//报错
public static abstract class A {
public void fun(){
System.out.println("fun");
}
public abstract void print();
}
- 使用static声明内部抽象类
package oop.Demo07;
public abstract class A {
public static abstract class C{
public abstract void print();
}
}
package oop.Demo07;
public class B extends A.C{
@Override
public void print() {
System.out.println("static内部抽象类");
}
}
package oop.Demo07;
public class TestDemo {
public static void main(String[] args) {
A.C ac = new B();
ac.print(); //static内部抽象类
}
}
3. 抽象类以及方法的定义
- 格式:
public abstract class A { //抽象类
public void fun(){
System.out.println("fun");
}
public abstract void print(); //抽象方法
}
package oop.Demo07;
public class B extends A{ //子类继承抽象类A
@Override
//对父类中的方法进行重写
public void print() {
System.out.println("子类对父类中的抽象方法重写");
}
}
package oop.Demo07;
public class TestDemo {
public static void main(String[] args) {
A a = new B();
a.print(); //子类对父类中的抽象方法重写
a.fun(); //fun
}
}