接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
通用接口建立起一种基本形式,表示所有导出类的共同部分。
抽象方法:仅有声明没有方法体。包含抽象方法的类叫做抽象类。如果从一个抽象类继承,并想创建新类对象,必须为基类中的抽象方法提供方法定义。如果不这样,导出类也是抽象类,必须使用abstract。
abstract void f();
接口:
interface这个关键字产生了一个完全抽象的类。只有方法名,参数列表,返回类型。
一旦实现了某个接口,其实现就变成了一个普通的类。
要实现一个接口时,接口中的方法必须被定义为public,接口中的方法默认都是public,所以防止访问权限被降低。
策略模式:创建一个能根据所传递的参数对象的不同而具有不同行为的方法。
使用接口的核心原因1:为了能够向上转型为多个基类型。
interface CanFight{
void fight();
}
interface CanSwim{
void swim();
}
interface CanFly{
void fly();
}
class ActionCharacter{
public void fight() {
}
}
class Hero extends ActionCharacter implements CanFight,CanSwim,CanFly{
public void swim() {}
public void fly() {}
}
public class Adventure_179_5 {
public static void t(CanFight x) {x.fight();}
public static void u(CanSwim x) {x.swim();}
public static void v(CanFly x) {x.fly();}
public static void w(ActionCharacter x) {x.fight();}
public static void main(String[] args) {
Hero h = new Hero();
t(h);
u(h);
v(h);
w(h);
}
}
使用接口的核心原因2:与使用抽象类基本相同,防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
如果要创建不带任何方法定义和成员变量的基类,那就该选择接口而不是抽象类。
接口吸引人的地方是,允许同一个接口具有多个不同的具体实现。
接口的意义:
有利于代码的规范,有利于对代码进行维护,隐藏具体的实现细节。