1. 如何定义抽象类、抽象方法
abstract关键字修饰
2. 抽象类无法被实例化
因为它不是具体的类。(但是有构造方法)
3. 抽象类有构造方法,是给子类创建对象的
4. 抽象类中可以定义抽象方法
语法:在方法的修饰列表中添加abstract关键字,并且以“;”结束,不能带有“{}”
public abstract void m1();
5. 抽象类中不一定有抽象方法,抽象方法一定在抽象类中
6. 一个非抽象类继承抽象类,必须将抽象类中的抽象方法覆盖、实现、重写
7. 抽象类的成员特点:
成员变量:
既可以是变量也可以是常量。
构造方法:
有构造方法,用于子类访问父类数据的初始化。
成员方法:
抽象类中方法既可以是抽象的,也可以是非抽象方法。
在父类中:
非抽象方法:子类继承的事情,提高代码的复用性
抽象方法:强制要求子类做的事情。
8. 抽象类中注意的问题:
一个类如果没有抽象方法,可以是抽象类,即抽象类中可以完全没有抽象方法。
这样类的主要目的就是不让创建该类对象。
9. abstract关键字不可以与哪些关键字使用。
private 冲突;private修饰的成员不能被继承,从而不可以被子类重写,而abstract修饰的是要求被重写的。
final 冲突;final修饰的成员是最终成员,不能被重写,所以冲突,static 无意义;
static冲突;static修饰成员用类名可以直接访问,但是abstract修饰成员没有方法体,所以访问没有方法体的成员无意义。
public abstract class Test {
public static void main(String[] args) {
//抽象类不能被实例化
//Teat_01 a = new Test_01();
B b = new C();// A B C
A a = new B();// A B
C c = new C();// A B C
}
public abstract void m1();
}
//父类:A
class A{
A(){
System.out.print(" A ");
}
}
//子类1:B 继承父类A
class B extends A{
B(){
System.out.print(" B ");
}
}
//子类2:C 继承父类B
class C extends B{
C(){
System.out.print(" C ");
}
}