package ejiekou;
/*
* 定义接口 - public interface A {void m1();}
* 接口内只能出现 - 常量 可简写成 public static final int a
* 抽象方法 可简写成 public abstract void m1();
* 接口间多继承 - interface D extends A,B,C{}
* 非抽象类实现接口,要对接口的方法"实现/重写/覆盖" public class MyClass implements B,C{public void m1(){};}
* 接口的作用:灯泡和灯座,可插拔
*![]()
*
* 接口也是一种引用类型,可以等同看做类
*
* 1.如何定义接口,语法:
* [修饰符] interface 接口名{}
*
* 2.接口中只能出现:常量、抽象方法
*
* 3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的
*
* 4.接口中没有构造方法,无法被实例化
*
* 5.接口和接口之间可以多继承
*
* 6.一个类可以实现多个接口。(这里的"实现"可以等同看做"继承")
*
* 7.一个非抽象的类实现接口,需要将接口中所有的方法"实现/重写/覆盖"
*/
public interface A {
//常量(必须用public static final修饰)
public static final String SUCCESS = "success";
public static final double PI = 3.14;
//public static final是可以省略的
byte MAX_VALUE = 127; //常量
//抽象方法(接口中所有的抽象方法都是public abstract)
public abstract void m1();
//public abstract是可以省略的
void m2();
}
interface B{
void m1();
}
interface C{
void m2();
}
interface D{
void m3();
}
interface E extends B,C,D{
void m4();
}
package ejiekou;
//implements是实现的意思,是一个关键字
//implements和extends意义相同
public class MyClass implements B,C{
public void m1(){};
public void m2(){};
}
package fjiekouzuoyong;
/* 客户类接口
*
* 接口作用:
* 1.可以使项目分层,所有层都面向接口开发,开发效率提高了
* 2.接口使代码和代码之间的耦合度降低,
* 就像内存条和主板的关系,变得可插拔”。可以随意切换
*
* 接口和抽象类都能完成某个功能,优先选择接口
* 因为接口可以多实现,多继承
* 并且一个类除了实现接口之外,还可以去继承其他类(保留了类的继承)
*/
public interface CustomerService {
//定义一个退出系统的方法
void logout();
}
package fjiekouzuoyong;
/*
* 编写接口的实现类
* 该类的编写完全是面向接口去实现的
*/
public class CustomerServiceImpl implements CustomerService{
//对接口中的抽象方法进行实现
public void logout(){
System.out.println("成功退出系统!");
}
}
package fjiekouzuoyong;
public class Test {
//入口
public static void main(String[] args) {
//要执行CustomerServiceImpl中的logout方法
//以下程序面向接口去调用
CustomerService cs = new CustomerServiceImpl(); //多态
//编译的时候看的是CustomerService接口,但是真正运行是CustomerServiceImpl里面的logout
//编译看左边,运行看右边
//调用
cs.logout();
}
}
package gjiekouzuoyong;
/*
* 汽车和发电机之间的接口
*
* 生产汽车的厂家面向接口生产
* 生产发动机的厂家面向接口生产
*/
public interface Engine {
//所有发动机都可以启动
void start();
}
package gjiekouzuoyong;
public class YAMAHA implements Engine{
public void start(){
System.out.println("YAMAHA引擎启动");
}
}
package gjiekouzuoyong;
public class HONDA implements Engine {
public void start(){
System.out.println("HONDA引擎启动");
}
}
package gjiekouzuoyong;
public class Car {
//成员变量
//引擎
//面向接口编程
Engine e;
//构造方法
Car(Engine e){
this.e = e;
}
//汽车应该能够测试引擎
public void testEngine(){
e.start(); //面向接口调用
}
}
package gjiekouzuoyong;
public class Test {
public static void main(String[] args) {
//1、生产引擎
Engine e1 = new YAMAHA(); //多态
//2、生产汽车
Car c = new Car(e1);
//3、测试引擎
c.testEngine();
//4、换HONDA
c.e = new HONDA();
c.testEngine();
}
}