格式:
interface 接口名{}
接口中的成员修饰符是固定的。
•成员常量:public static final
•成员函数:public abstract
•发现接口中的成员都是public的。
接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
接口的特点
l接口是对外暴露的规则。
l接口是程序的功能扩展。
l接口的出现降低耦合性。
l接口可以用来多实现。
l类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
l接口与接口之间可以有继承关系。
接口与抽象类
共 性: |
都是不断抽取出来的抽象的概念 |
区别 1: |
抽象类体现继承关系,一个类只能单继承 接口体现实现关系,一个类可以多实现 |
区别 2: |
抽象类是继承,是 "is a "关系 接口是实现,是 "like a"关系 |
区别 3: |
抽象类中可以定义非抽象方法,供子类直接使用 接口的方法都是抽象,接口中的成员都有固定修饰符 |
/* 如果一个抽象类的方法都是抽象的, 这时可以将抽象类用另一种形式来体现。就是接口。 接口定义的关键字就是 interface */ /* abstract class AbsDemo { abstract void show(); abstract void method(); } */ interface InterDemo { /* 接口中成员的定义: 常见成员有两种: 1,全局常量。 2,抽象方法。 接口中的成员都是public的。 接口: 子类必须实现了接口中所有的抽象方法后,子类才可以实例化。 否则,该子类是一个抽象类。 */ public static final int X = 3; public abstract void method1(); public abstract void method2(); } class Demo implements/*实现*/ InterDemo { public void method1() { } public void method2() { } } class InterfaceDemo { public static void main(String[] args) { Demo d = new Demo(); System.out.println(d.X); System.out.println(Demo.X); System.out.println(InterDemo.X); } }
/* 接口的好处:是将多继承进行改良,用多实现进行体现。 一个类只能继承一个类, 但是一个类可以实现多个接口。 另一个体现。 一个类在继承另一个类的同时,还可以实现多接口。 接口的出现避免了单继承的局限性。 */ interface DemoA { public void show(); } interface DemoB { public void show(); } class DemoC { } class Demo extends DemoC implements DemoA,DemoB//多实现。 { public void show(){} } interface A { void show(); } interface B { void show(); } interface C extends B,A//接口之间存在着多继承。 { } class InterfaceDemo2 { public static void main(String[] args) { System.out.println("Hello World!"); } } /* 抽象类中没有抽象方法的举例。 */ interface Inter { public void method1(); public void method2(); public void method3(); } //没有抽象方法的抽象类。 abstract class Test implements Inter { public void method1() { } public void method2() { } public void method3() { } } class Test1 extends Test { public void method1() { System.out.println("test1,method1 run); } } class Test2 extends Test { public void method2() { System.out.println("test2,method2 run); } } /* class Test1 implements Inter { public void method1() { System.out.println("test1,method1 run); } public void method2() { } public void method3() { } } class Test2 implements Inter { public void method1() { } public void method2() { System.out.println("test2,method2 run); } public void method3() { } } */
interface A{void show1(); void show2(); } interface B{void show ();} interface C extends A,B{ } abstract class D implements A{ @Override public void show2() { } @Override public void show1() { // TODO Auto-generated method stub } }