一、接口的概念:
1、初期理解,可以是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
2、class用于定义类,interface 用于定义接口
二、接口定义时,格式特点:
1、接口中常见的定义:常量,抽象方法
2、接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
3、记住:接口中的成员都是public的。
只要是interface里面成员都有固定修饰符,可以省略但一般为了好看都要加上
三、类与类之间的关系
类与类之间是继承关系 extends
类与接口之间是实现关系 implements
接口之间的关系也是继承extends(可以多继承)
四、接口的定义
接口是不可以创建对象的,因为有抽象方法 ,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以被实例化 否则子类是一个抽象类
接口可以被类多实现(接口里的方法都是抽象的没有方法体,而继承父类的方法有方法体) 也是对多继承的转换形式 java支持多实现
interface A{ void methodA(); } interface B //extends A//java在接口之间支持多继承 因为接口都没有方法体 { void methodB(); } interface C extends B,A{ void methodC(); } class D implements C{ public void methodA(){} public void methodB(){} public void methodC(){} }
public class InterfaceDemo { public static void main(String[] args) { Test t = new Test(); System.out.println(t.NUM); System.out.println(Test.NUM); System.out.println(Inter.NUM); //t.NUM = 4;//错误,因为NUM是一个常量了 } } interface Inter{ public static final int NUM = 3; public abstract void show(); } interface InterA{ public abstract void show(); } class Demo{ public void function(){} } //java 在继承一个类的同时还可以支持多实现 class Test extends Demo implements Inter,InterA { public void show(){} }
五、接口的扩展性
接口大多用于扩展功能用的,(基本功能定义在类中,扩展功能定义在接口中)
1 public class InterfaceTest1 { 2 public static void main(String[] args) { 3 4 } 5 } 6 abstract class Student{ 7 abstract void study(); 8 void sleep(){ 9 System.out.println("sleep"); 10 } 11 } 12 //将一些不是所有人都具有的功能提取出来 封装成一个接口,需要的人就去实现他,不需要的就不用去实现他 13 interface Smoking{ 14 public abstract void smoke(); 15 } 16 17 //如果ZhangSan吸烟那就就实现Smoking这个接口 18 class ZhangSan extends Student { 19 void study(){} 20 }
1 public class InterfaceTest2 { 2 public static void main(String[] args) { 3 4 } 5 } 6 7 //该程序的设计思想有问题,不要把一个对象设计成一个类, 8 abstract class Student{ 9 abstract void study(); 10 void sleep(){ 11 System.out.println("sleep"); 12 } 13 } 14 15 //提供一个接口,只要让需要的类就去实现它,不需要的就不用实现它,这样就可以多了很多功能 16 interface Smoking{ 17 public void smoke(); 18 } 19 20 //zhangsan这人抽烟就继承Smoking 21 class zhangsan extends Student implements Smoking{ 22 void study(){} 23 public void smoke(){} 24 } 25 class lisi extends Student{ 26 void study(){} 27 }
六、抽象类和接口的异同点:
相同点:
1、都是不断向上抽取出来的
不同点:
1、抽象类需要被继承,而且只能但继承。
接口需要被实现,而且可以多实现
2、抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象反法
接口中只能定义抽象方法,必须由子类去实现
3、抽象类的继承,是 is a关系,在定义该体系的基本共性内容
接口的实现时 like a关系,在定义体系额外功能