接口
程序员文章站
2022-06-13 19:11:23
...
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
1. 抽象类和抽象方法
- 抽象方法:仅有声明没有方法体。
abstract void f();
- 抽象类:包含抽象方法的类。
2. 接口
- 接口被用来建立类与类之间的协议。
- 用interface关键字代替class关键字(默认包访问权限),定义接口。要让一个类遵循某个特定接口,使用implements关键字。
interface Instrument{
int VALUE = 5 ; //static && final
void play();//Automatically public
void adjust();
}
class wind implements Instrument{
public void play(){
.....
}
public String toString(){
...
}
public void adjust(){
...
}
}
3. 完全解耦
想将某方法应用于不在该方法继承结构中的某个类,可以使用接口。
- 策略设计模式:根据所传递参数的不同而具有不同行为的方法。策略就是传进去的参数对象,不同的参数对象相当于不同的策略。
- 适配器模式:适配器中的代码接受你所拥有的接口,并产生你多需要的接口。
4. Java中的多重继承
- 能够向上转型为多个基类型
- 防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。
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() {}
5. 通过继承来扩展接口
创建三个接口,每个接口都包含两个方法。继承出一个接口,它组合了这三个接口并添加了一个新的方法。创建一个实现了该新接口并继承了某个具体类的类。现在编写四个方法,每一个都接受这四个接口之一作为参数。在main()方法中,创建这个类的对象,并将其传递给这四个方法。
interface A{ void a1(); void a2();}
interface B{ void b1(); void b2();}
interface C{ void c1(); void c2();}
interface D extends A,B,C{ void d();}
public class Java9_5_14 implements D {
public void a1(){System.out.print("a1");}
public void a2(){System.out.print("a2");}
public void b1(){System.out.print("b1");}
public void b2(){System.out.print("b2");}
public void c1(){System.out.print("c1");}
public void c2(){System.out.print("c2");}
public void d(){System.out.print("d");}
public static void main(String[] args){
Java9_5_14 ja=new Java9_5_14();
ja.a1();
ja.a2();
ja.b1();
ja.b2();
ja.c1();
ja.c2();
ja.d();
}
}
- 组合接口时名字冲突:组合不同接口中使用相同的方法名通常会造成代码可读性的混乱。
6. 适配接口
7. 接口中的域
接口中任何域都是static和final,是一种便捷创建常量组的工具。
8. 接口嵌套
接口可以嵌套在类或者其他接口中。
9. 接口与工厂
工厂设计模式
上一篇: 使用rsync来实现文件同步