一、定义接口 [修饰符] interface 接口名 [extends 父接口名列表] { [public] [static] [final] 常量; [public] [abstract] 方法; }
二、接口的继承
interface interfaceA{ int one = 1; void sayA(); } interface interfaceB{ int two = 2; void sayB(); } interface interfaceC extends interfaceA, interfaceB{ int three = 3; void sayC(); } public class app { public static void main(String[] args) { System.out.println(interfaceC.one); System.out.println(interfaceC.two); System.out.println(interfaceC.three); } }三、接口的实现 [修饰符] class <类名> [extends 父类名] [implements 接口列表] { }
每个类只能实现单重继承,而实现接口时,一次则可以实现多个接口
interface Calculate{ final float PI = 3.14159f; float getArea(float r); float getCircumference(float r); } interface GeometryShape{ final float PI = 3.14159f; float getArea(float r); float getCircumference(float r); void draw(); } public class Circ { public float getArea(float r) { float area = Calculate.PI*r*r; return area; } public float getCircumference(float r) { float circumference = 2*Calculate.PI*r; return circumference; } public void draw() { System.out.println("画一个圆形!"); } public static void main(String[] args) { Circ circ = new Circ(); float r = 7; float area = circ.getArea(r); System.out.println("圆的面积为:"+area); float circumference = circ.getCircumference(r); System.out.println("圆的周长为:"+circumference); circ.draw(); } }四、接口和抽象类 接口和抽象类的共同点如下: (1)接口与抽象类都不能被实例化,能被其他类实现和继承。 (2)接口和抽象类中都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 接口和抽象类的用法差别如下: (1)接口中只能包含抽象方法,不能包含普通方法;抽象类中可以包含普通方法。 (2)接口中不能定义静态方法;抽象类中可以定义静态方法。 (3)接口中只能定义静态常量属性,不能定义普通属性;抽象类里可以定义静态常量属性,也可以定义普通属性。 (4)接口不能包含构造器;抽象类可以包含构造器,抽象类里的构造器是为了让其子类调用并完成初始化操作。 (5)接口中不能包含初始化块,但抽象类可以包含初始化块。 (6)一个类最多只能有一个直接父类,包含抽象类;但是一个类可以实现多个接口。
五、接口回调
interface People{ //定义接口 void Say(String s); } class Teacher implements People{ //Teacher实现接口 @Override public void Say(String s) { System.out.println(s); } } class Student implements People{ //Student实现接口 @Override public void Say(String s) { System.out.println(s); } } public class app1 { public static void main(String[] args) { People tea; //声明接口变量 tea = new Teacher(); //接口变量中存放对象的引用 tea.Say("我是老师"); //接口回调 tea = new Student(); //接口变量中存放对象的引用 tea.Say("我是学生"); //接口回调 } }六、接口与多态
interface Animals{ void Eat(String s); } class Dog implements Animals{ @Override public void Eat(String s) { System.out.println("我是小狗,我爱吃"+s); } } class Cat implements Animals{ @Override public void Eat(String s) { System.out.println("我是小猫,我爱吃"+s); } } public class Example { public static void main(String[] args) { Animals ani; ani = new Dog(); ani.Eat("骨头"); ani = new Cat(); ani.Eat("鱼"); } }七、接口参数
interface Eatfood{ void Eatfood(); } class Chinese implements Eatfood{ @Override public void Eatfood() { System.out.println("中国人习惯用筷子"); } } class America implements Eatfood{ @Override public void Eatfood() { System.out.println("美国习惯用刀叉"); } } class EatMethods{ public void lookEatMethods(Eatfood eat) { //定义接口参数类型 eat.Eatfood(); //接口回调 } } public class Example2 { public static void main(String[] args) { EatMethods em = new EatMethods(); em.lookEatMethods(new Chinese()); em.lookEatMethods(new America()); } }