1、接口的定义:
JAVA接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的定义没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的功能。
2、格式
[public] interface 接口名称 []extends 父接口1,父接口2,父接口3]{
//静态常量
[public] [static] [final] 数据类型 常量名=常量值;
//抽象方法
[public] [abstract] [native] 返回值类型 方法名(参数列表);
}
3、类实现接口格式:
【修饰符】 class 类名 【extends 父类名】【implements 接口1,接口2,接口3,】{
类成员变量和成员方法;
为接口1中的所有方法编写方法体,实现接口1;
为接口2中的所有方法编写方法体,实现接口2;
为接口3中的所有方法编写方法体,实现接口3;
}
4、接口的特性:
1)接口不能被实例化;
2)接口中所有方法都是抽象的;
3)接口中的字段必须是静态常量
4)接口中所有的成员都必须是public
5)接口可以被多重实现或者继承
6)接口没有构造器
5、如何访问接口的常量
接口名.常量名
代码分享:
public interface MyInterface1 { public static final int a=1; //等同于 int b=2; public abstract void eat1(); //等同于 void walk1(); }
public class DogInterface implements MyInterface1 { @Override public void eat1() { System.out.println("狗狗爱吃肉"); } @Override public void walk1() { System.out.println("狗狗爱跑步"); } public void sleep(){ System.out.println("狗狗爱睡觉"); } }
public class CatInterface implements MyInterface1 { @Override public void eat1() { System.out.println("猫猫爱吃鱼"); } @Override public void walk1() { System.out.println("猫猫爱爬墙"); } }
public class InterfaceIest { public static void main(String[] args) { MyInterface1 d1 = new DogInterface();//多态性,接口的引用----->指向类的实例对象 d1.eat1(); d1.walk1(); //d1.sleep();//编译通不过,因为编译时认为的d1是MyInterface,MyInterface并没有这个sleep方法 //d1.b;//不能通过实例化对象来访问接口的常量 MyInterface1 c1 = new CatInterface(); c1.walk1(); c1.eat1(); DogInterface d2 = new DogInterface(); d2.eat1(); d2.walk1(); d2.sleep(); System.out.println("如何访问接口的常量"); //如何访问接口的常量 System.out.println(MyInterface1.a+" b:"+ MyInterface1.b); } }
//结果
狗狗爱吃肉
狗狗爱跑步
猫猫爱爬墙
猫猫爱吃鱼
狗狗爱吃肉
狗狗爱跑步
狗狗爱睡觉
如何访问接口的常量
1 b:2
一个接口可以实现多重继承,一个接口可以继承多个接口:
public interface MyInterface2 { String name="yang"; void eat2(); }
public interface MyInterface3 extends MyInterface1,MyInterface2{ public void eat3(); }
一个类可以同时实现多个接口
public class MyInterface implements MyInterface1, MyInterface2 { //实现了两个接口的类 //实现了两个接口中所有的方法 public void eat1() { System.out.println("第一次吃饭!!!"); } public void walk1() { System.out.println("第一次走路!!!"); } public void eat2(){ System.out.println("第二次吃饭!!!"); } }
public class MyInterfaceTest implements MyInterface3 { @Override public void eat1() { System.out.println("一天三顿:第一次吃饭"); } @Override public void eat2() { System.out.println("一天三顿:第二次吃饭"); } @Override public void eat3() { System.out.println("一天三顿:第三次吃饭"); } @Override public void walk1() { System.out.println("一天三顿:第一次走路"); } }