抽象方法
举个例子:
图像类(Geometry类)作为矩形和圆形等具体形状类的共同父类,是一种抽象的概念。它的getArea方法功能是计算图形的面积,由于不知道计算图形的具体形状,所以getArea方法的方法体实际上没有实际意义。所以Geometry类的每个子类都要重写父类的getArea方法。
解决办法:通过abstract关键字将getArea方法修饰为抽象的,此时的方法称为抽象方法。
访问修饰符 abstract 返回类型 方法名(参数列表);
public abstract void getArea();
抽象类
若类含有抽象方法,则类必须以abstract关键字声明为抽象类。
public abstract class 类名
不论抽象类是否含抽象方法,其都不允许实例化。
若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中的所有抽象方法重写为带方法体的普通方法,否则子类仍必须是抽象类。
接口
public interface 接口名称
{
(方法头...)
}
接口中的所有方法都是public,抽象方法。 一个类可以实现一个或者多个接口。
目的:为了给其他类提供行为说明。
属性:在接口中的所有属性都为 public、final 和 static. 因为他们会自动地变为 final, 所以你必须为它们提供初始化值。
实现:如果一个类要实现接口,它需要在类头中使用implements 关键字。
一个接口:public class RubberDuck extends Duck implements Quackable
多个接口:public class MyClass implements Interface1,
Interface2,
Interface3
继承接口:
[public] interface 接口名 extends 父接口1,父接口2,...{
//字段和抽象方法
}
接口只能继承接口,而不能继承类。 与类的继承类似,接口的继承也表达了“is-a”的逻辑。
相同点:
都是Java提供的对现实世界中的实体进行抽象的两种机制。
1.不能被实例化
2.在接口中所列的所有方法必须在别处被重写。
不同点:
接口中关键字interface 替换了关键字 class, 以及 接口中的方法只有方法头加分号结尾,没有方法主体。