在继承的层次结构中,每个新子类都使类变得越来越明确具体。如果从子类追溯到父类,类会变得更通用,更不明确。父类的设计应该包含子类的共同特征。如果一个父类设计地非常抽象以至于它没有任何具体的实例,那它就叫抽象类。
抽象类
抽象方法:通过abstract关键符修饰的方法。(只有方法头,没有方法体,要求在派生类中被重写)
public abstract void getArea();
包含抽象方法的类会自动变成抽象类。
如果方法没有在派生类中被重写,那么编译器会报错。
抽象方法被用来确保派生类会实现这个方法。
抽象类可以含零至多个普通方法、抽象方法,不允许被实例化(不能去定义一个常量)
若父类是抽象类,子类不想成为抽象类,则子类必须将父类中所有的抽象方法重写为带方法体的普通方法。
接口
public interface 接口名称{
(方法头...)
}
接口中所有方法都是public,抽象方法
一个类可以实现一个或多个接口
接口中所有属性为:public,final,static
会自动变final,给初始值
implement关键字
一个类只能从一个基类派生
Java允许一个类实现多个接口
实现多接口,使用关键字,写上接口名:
public class Myclass implements interface1,interface2,interface3...
继承接口:接口之间继承,只能继承接口,不能继承类
抽象类和接口的比较
比较点 | 抽象类 | 接口 |
---|---|---|
关键字 | abstract class | interface |
字段 | 无限制 | 必须是public、static、和final的 |
方法 | 既可以包含普通方法,也可以含抽象方法 | 只能含抽象方法,且必须是public的 |
继承/实现 | 只能被类或抽象类继承 | 既可以被接口继承,也可以被类或抽象类实现 |
多重继承 | 不支持 | 可以继承多个父接口 |