abstract类
-
抽象类是没有具体对象的类。即不能被实例化。
-
抽象类是需要继承的,所以abstract与final不能同时修饰同一个类。
-
抽象类是它的所有子类的公共属性的集合。
例如 :抽象类Vehicle→子类Train
↓
子类Track两个子类是可以实例化的类。
-
抽象类可以继承非抽象类、抽象类,只有非抽象类才能被实例化。抽象类必须有子类,一个子类只能继承一个抽象类;
-
抽象类虽然不能用new来实例化,但可以有构适方法,构适方法可以被子类构造函数调用。
-
抽象类中可以包含抽象方法,也可以不包含。即使不包含任何抽象方法,也可以将一个类声明为抽象类。
-
其中成员变量可以不赋值。
abstract方法
- abstract方法必须位于abstract类中,一旦某个方法被定义成abstract方法,则他所在的类必须声明为抽象类。
- 抽象方法只需声明,不需实现
- 抽象方法在子类中必须实现,如果不实现,子类仍然是抽象类。即子类继承抽象类的话,必须覆写抽象类的所有抽象方法。
抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。
在继承了抽象类的子类中通过super(参数列表)调用抽象类中的构造方法
抽象类虽然不能自己实例化对象,但是在子类新建对象调用子类的构造方法时会先调用抽象类的无参构造方法,这样一来,就可以给抽象类的参数赋值了
abstract class A{
abstract void callme(); //抽象方法
abstract void callyou(); //抽象方法
void metoo(){
System.out.println("inside A's metoo() method"); //抽象类中的非抽象方法
}
}
abstract class B extends A{
abstract void callme();
void callyou(){ //只实现父类中一个抽象方法 这个类还是抽象类
System.out.println("inside B's callyou() method");
}
class class C extends A{ //实现父类中所有抽象方法,为可实例化类
void callme(){
System.out.println("inside C's callme() method");
}
void callyou(){
System.out.println("inside C's callyou() method");
}
}
}
抽象关键字不能与private,static,final并列修饰同一方法。