首页 > 代码库 > Java---接口
Java---接口
Java接口的概念:
讲的是狭义的接口类型。广义的接口是指类的接口、方法的接口。
初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
Java接口类似于纯抽象类,只包含常量和抽象方法,而没有变量和具体方法。从更深层次理解Java接口,是定义(规范、约束)与实现的分离。Java接口本身没有任何实现,所以Java接口比Java抽象类更抽象化。Java接口的方法只能是抽象的和公开的,Java接口不能有构造方法,Java接口可以有public 的,静态的final属性。
格式:
Interface{}
接口定义时,格式特点:
1.常见定义:常量,抽象方法
2.接口中的成员都有固定的修饰符
成员常量:public static final
成员函数:public abstract
接口中的成员都是public的。
interface Inter { public static final int num = 3; public abstract void show (); }
其中,num 的修饰符除int外,可以全部去掉。
interface Inter { int num = 3; void show (); }
即使什么也不写,接口内的成员的修饰符没变,即num的修饰符是public static final ,show方法的修饰符是 public abstract 。
接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全部复写后,子类才能实例化,否则子类是一个抽象类。
接口与类之间的关系:实现 implements
接口可以被类多实现。弥补了Java 不能多继承的缺陷。
Java不能多继承的原因:
假如说有两个类:
class A { int num = 10; void show () { System.out.println(num); } } class B { int num = 20; void show () { System.out.println(num); } }
再来一个类C同时继承这两个,那么调用C类对象的show方法,那么问题来了:调用的是哪个类中的show方法,输出的num的值又是多少?
这就是Java舍弃了多继承的原因。
为什么多继承不可以,多实现就可以?
这是因为接口所固定的成员修饰符。变量都是常量,方法都是抽象的,没有方法体,具体的实现由子类完成,所以就不会引起混乱。
那么如果多实现的两个接口中有相同的方法怎么办?
还是那句话,方法都是抽象的,具体的实现由子类完成。子类只需完成一次复写操作就可以覆盖掉接口中的同名方法。
interface Inter { public static final int num = 3; public abstract void show (); } interface Inter_b { public static final int num = 10; public abstract void show (); } class Test implements Inter,Inter_b { public void show () { System.out.println(Inter.num+"\n"+Inter_b.num); } } public class Interface { public static void main (String[] args) { new Test().show (); } }
一个类在继承一个类的同时还能实现多个接口。
具体的形式如下:
class A extends B implements C,D
先继承,再实现。
其中A与B是类名,C与D是接口名
意思就是,定义类A继承了类B,同时实现接口C和D。
interface Inter { public static final int num = 3; public abstract void show (); } interface Inter_b { public static final int num = 10; public abstract void show (); } class Ress { int x = 20; public void display () { System.out.println("Res.show()"+x); } } class Test extends Ress implements Inter,Inter_b { public void show () { System.out.println(Inter.num+"\n"+Inter_b.num); } } public class Interface { public static void main (String[] args) { new Test().show (); new Test().display(); } }
接口与接口之间的关系:
类与类之间是继承关系
类与接口之间是实现关系
接口与接口之间是继承关系
接口之间存在多继承。
interface A { int num = 0; void show1 (); } interface B { int num = 2; void show2 (); } interface C extends A,B { void show3 (); } class Test implements C { public void show1 () {} public void show2 () {} public void show3 () {} }
Java---接口