/*接口是与类并行的一个概念
- 1,接口可以看成一个特殊的抽象类,是常量与抽象方法的集合
- 2,常量:所有的常量都用public static final 修饰的
- 3,方法:所有的方法都是public abstract修饰
- 4,接口是没有构造器的
- 5,接口定义的就是一种功能,此功能可以被类实现(inplements)
- 6,实现接口的类,必须要重写其中所有的抽象方法,或者定义为抽象类
- 7,类可以实现多个接口 (继承是单继承的 接口是可以多实现的)
- 8,接口和接口之间也是继承的关系,而且可以多继承的/
9,接口的多态性是指实现接口的类重写接口的抽象方法
总结:
1, 通过接口可以实现不相关的相同行为,而不需要考虑这些类之间的层次关系。
2, 通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能
3, 接口用来定义规范。解除耦合关系(以前用继承)
设计模式:工厂方法
概述:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其他子类。
适用性:
1, 当一个类不知道它所必须创建的对象的类的时候。
2, 当一个类希望由它的子类来制定它所创建的对象的时候。
3, 当类讲创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
下面是代码:
package com.yz;
/*接口是与类并行的一个概念
* 1,接口可以看成一个特殊的抽象类,是常量与抽象方法的集合
* 2,常量:所有的常量都用public static final 修饰的
* 3,方法:所有的方法都是public abstract修饰
* 4,接口是没有构造器的
* 5,接口定义的就是一种功能,此功能可以被类实现(inplements)
* 6,实现接口的类,必须要重写其中所有的抽象方法,或者定义为抽象类
* 7,类可以实现多个接口 (继承是单继承的 接口是可以多实现的)
* 8,接口和接口之间也是继承的关系,而且可以多继承的*/
public class TestInterface {
public void test1(Runner r){ //接口不能实例化但是可以作为参数传进函数
r.run(); //Runner e =new Duck(); 虚拟方法调用
}
public void test2(Flier f){
f.fly();
}
public void test3(Swimmer s){
s.swim();
}
}
interface AA{
void method1();
void method2();
}
interface mm{
void method3();
}
class BB implements AA{
public void method1(){} //想想为什么这里没有public会报错?
public void method2(){}
}
class DD extends BB implements AA,mm{
public void method3(){}
} //即继承又实现的方式
//接口和具体的实现类也存在多态性
interface Runner{
void run();
}
interface Swimmer{
void swim();
}
interface Flier{
void fly();
}
class Duck implements Runner,Swimmer,Flier{
@Override
public void fly() {
System.out.println("丑小鸭变成白天鹅");
}
@Override
public void swim() {
// TODO Auto-generated method stub
System.out.println("丑小鸭游啊游");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("丑小鸭跑起来");
}
}