接口
1.接口的定义
【修饰符】interface 接口名 extends 父接口1,父接口2{
零个到多个常亮定义
零个到多个抽象方法定义
零个到多个内部类 接口 枚举定义
零个到多个默认方法或类方法定义.
}
*修饰符可以为public或者省略(default),如果省略了public,默认使用包权限访问控制符(在相同包结构才可以访问接口)
*一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类
*接口定义的只是一种规范,所以接口中不能包含构造器和初始化块定义,接口中可以包含成员变量(静态常量),方法(抽象实例方法,类方法或者默认方法),内部类(内部接口,枚举等)定义
*接口中的成员变量默认使用public static final进行修饰
2.接口是什么?
接口定义的是一些多个类共同的公共行为规范(内部的修饰符均为public),这些规范是和外界沟通的通道
3.接口的多继承
接口相较于类而言,可以实现多继承
package demo01;
public class Client {
interface interfaceA{
int PROP_A=5;
void testA();
}
interface interfaceB{
int PROP_B=6;
void testB();
}
interface interfaceC extends interfaceA,interfaceB{
int PROP_C=7;
void testC();
}
public static void main(String[]args){
System.out.println(interfaceC.PROP_A);
System.out.println(interfaceC.PROP_B);
System.out.println(interfaceC.PROP_C);
}
}
4.如何使用接口?
接口不能用来创建实例,但是接口可以用于声明引用类型变量,必须引用到其实现类的对象,借口的主要用途就是被实现类实现
*定义变量,也可以用来进行强制类型转换
*调用接口中定义的常量
*被其他类实现
5.接口和抽象类的区别
相同点:
接口和抽象类都不能被实例化,它们位于继承树的顶端,用于被其他类进行实现和继承
接口和抽象类中都可以包括抽象方法,实现接口或继承抽象类的普通子类必须实现抽象方法
不同点:
接口体现的是一种规范,规定了必须向外部实现哪些服务(以方法的形式),对于接口的调用者而言,接口规定了调用者可以进行调用哪些服务,如何调用这些服务。当在一个程序中进行调用时,接口是多个模块的耦合标准,当在多个程序中进行调用时,接口是多个程序之间的通信标准
抽象类作为多个子类的父类,体现的是一种模板设计
*接口中只有抽象和默认方法,抽象类中可以包含普通方法
*接口中不能有静态方法,抽象类中可以
*接口中只能定义静态常量,不能定义普通成员变量,抽象类中均可
*接口中无构造器,抽象类中可以提供为其他类调用的构造器
*接口中没有初始化块,抽象类中可以包含初始化块
6.面向接口编程(简单工厂模式)
package com.lz.factory.simplefactory;
public interface Car {
public void run();
}
package com.lz.factory.simplefactory;
import com.lz.factory.factorymethod.Audi;
import com.lz.factory.factorymethod.Byd;
import com.lz.factory.factorymethod.Car;
import com.lz.factory.factorymethod.Farri;
public class CarFactory {
public static Car createCar(String type){
if("奥迪".equals(type)){
return new Audi();
}else if ("比亚迪".equals(type)){
return new Byd();
}else if("法拉利".equals(type)){
return new Farri();
}
else{
return null;
}
}
public static Car createAudi(){
return new Audi();
}
public static Car createFarri(){
return new Farri();
}
}
package com.lz.factory.simplefactory;
import com.lz.factory.factorymethod.Car;
public class Farri implements Car {
@Override
public void run() {
System.out.println("法拉利在跑");
}
}
package com.lz.factory.simplefactory;
import com.lz.factory.factorymethod.Car;
/*
* 如果不使用工厂模式 需要依赖很多项
* **/
public class Client01 {//调用者
public static void main(String[]args){
// Car c1=new Audi();
// Car c2=new Byd();
// c1.run();
// c2.run();
//简单工厂模式
Car c1=CarFactory.createCar("奥迪");
c1.run();
Car c2=CarFactory.createCar("比亚迪");
c2.run();
Car c3=CarFactory.createCar("法拉利");
c3.run();
Car c4=CarFactory.createAudi();
c4.run();
}
}