随着继承层次中一个个新子类变得越来越具体,而父类则更一般,更通用。类的设计应该保证父类和子类能够共享特征。有时将一个父类设计的非常抽象,以至于它没有具体的实例,这样的类叫做抽象类。
一、
1.用abstract关键字来修饰一个类,这样的类叫抽象类。
2.用abstract关键字来修饰一个方法,这样的方法叫抽象方法。
抽象方法只有方法的声明,没有方法的实现:如
public abstract void run();
注意:含有抽象方法的类必须被声明为抽象类
抽象类不能被实例化,抽象类是用来继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体,若没有重写全部的抽象方法,则仍为抽象类。
不能用abstract修饰变量,代码块,构造器。
不能用abstract修饰私有方法,静态方法,final的方法,final的类。
public abstract class Text {
int a;
public abstract void a();
public abstract void b();
public void c(){
System.out.println("不抽象");
}
}
class Son extends Text{
public void a(){}
public void b(){
System.out.println("重写的抽象方法");
}
public void c(){
System.out.println("重写");
}
}
class Son1{
public static void main(String[] args) {
Son son1=new Son();
son1.c();
son1.b();
}
}
二、抽象类和接口的异同
抽象类和接口都位于继承树的上层。
相同点:
1.都不能被实例化
2.都包含抽象方法,这些抽象方法用于描述它能提供的服务,但不需要具体的实现。
3.抽象类和接口都是一种数据类型。
不同点:
1.在抽象类中可以为部分方法提供默认的实现,从而避免了重复实现他们,从而提高了代码的重用性,这是抽象类的优势。
2.一个类只能继承一个父类(这个类可能是抽象类),但一个类可以实现多个接口,这是接口的优势。