1、如果父类中含有抽象方法,留给子类去实现,则父类必须显式的被定义成一个abstract类,否则
子类继承父类并实现抽象方法的时候,发生编译报错
例子:
public class demo{
public static void main(String[] args){
SubClass sc = new SubClass();
sc.print();
}
}
class SuperClass{
abstract void print();
}
class SubClass extends SuperClass{
void print(){
System.out.println("print");
}
}
2、一个非抽象类继承了一个含有抽象方法的抽象类。则它必须要覆盖(或实现)父类中的抽象方法,否则编译报错。
public class demo{
public static void main(String[] args){
SubClass sc = new SubClass();
sc.print();
}
}
abstract class SuperClass{
abstract void print();
}
class SubClass extends SuperClass{
// void print(){
// System.out.println("print");
//}
}
总结:
1) Abstract(抽象)可以修饰类、方法
如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。Abstract类的设计是将子类的共性最大限度的抽取出来,以提高程序的统一性。
如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。
反之,如果一个类为抽象类,那么其中可能有非抽象的方法。
3) 抽象类不能实例化,但仍可以声明;
Abstract类可以作为编译时类型,但不能作为运行时类型。
4) 子类继承抽象类必须实现其中抽象方法
当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。
注意比较:
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。