“抽象方法”是指只有声明没有实现主体的方法,用abstract标识。含有抽象方法的类就是抽象类,所有方法都是抽象方法的类就是接口。
1. 抽象类(Abstract Class)
含有一个或者多个抽象方法的类是抽象类,抽象类须用abstract修饰,否则编译器会报错,即使不包含任何抽象方法,声明为abstract的类也是抽象类。抽象类是不能实例化的,也就是不能为抽象类创建一个对象,这是抽象类的特点之一。所有方法都为抽象方法的类叫“纯抽象类”。
2. 接口(Interface)
接口跟纯抽象类相似,所有的方法都是抽象方法,也就是只有方法声明没有实现,但是接口的抽象方法前不是必须加abstract关键字,而且接口的方法都是public的。与抽象类不同的是,接口的只能包含基本数据类型的数据成员,并且这些数据成员只能是static和final的,但不能使空白final。创建接口要用interface关键字,而不是class,实现接口用implements关键字。在子类中实现接口类的方法时,所有接口中的方法都要定义成public的,否则编译器会报错。
interface Animals {
int age = 65; //static and final
void eat(); //not necessary to add 'abstract'
}
class Dog implements Animals {
public void eat() { //methods in interface should be public
System.out.println("Dog is eating.");
}
}
3. 多重继承
Java通过接口实现多重继承,Java类只能继承自一个父类(可以是抽象类),但是可以继承多个接口,这样就可以实现多重继承了。继承了多个接口的类实例可以上溯到任何一个父接口。
interface Runable {
void run();
}
interface Eatable {
void eat();
}
class Animals {
String name = "animal";
public String name() {
return name;
}
}
class Dog extends Animals implements Runable, Eatable {
public String name() {
return name;
}
public void eat() {
System.out.println("Dog is eating.");
}
public void run() {
System.out.println("Dog is running.");
}
}
4. 接口扩展
接口可以通过继承接口来扩展,接口之间继承用extends。通过下面的继承,Animal接口就有3个方法了:run,eat,name
interface Runable {
void run();
}
interface Eatable {
void eat();
}
interface Animal extends Runable, Eatable {
void name();
}