接口(interface):
接口是一种公共的规范标准,只要符合规范标准,大家都可以通用。接口和抽象类相似,但是接口比抽象类的规定更加规范和严格。Java中的接口更多的体现在对象行为的抽象!
抽象类的描述在 面向对象的特点10 中已经完成讲解,有问题的可以参考,以下链接! 小红在成长,公众号:小红的成长日记Java开发——10.面向对象的特点(2.1):继承VS抽象
抽象类:
抽象方法所在的类一定是抽象类,但是抽象类中可以有非抽象方法。
接口:
接口中的方法均为抽象方法。
接口定义格式:
接口用关键字interface修饰
publicinterface接口名 {}
接口的使用:
接口是不能创建对象,必须有实现类才能使用,类实现接口用implements表示
publicclass类名implements接口名 {}
注意: 接口的实现类必须重写接口中的所有的抽象方法。
接口成员的特点:
1.成员变量
只能是常量,默认修饰符:public static final,final修饰所以接口中定义的变量都是常量
2.成员方法
只能是抽象方法,默认修饰符:public abstract
3.构造方法
没有构造方法,因为接口主要是扩展功能的,而没有具体存在,接口中只有抽象方法。
案例展示:
publicinterfaceInter { //接口中定义的变量只能是常量//默认修饰符:public static final,可以省略修饰符(public static final)publicintnum1=10; publicfinalintnum2=20; publicstaticfinalintnum3=30; intnum4=40;//默认是被 public static final 修饰//接口没有构造方法// public Inter() {}//接口中不能有方法主体// public void show() {}//默认修饰符:public abstract publicabstractvoidmethod1(); publicvoidmethod2(); voidshow(); }
实现类:
/*** 子类是具体类,要实现接口中所有的抽象方法*/publicclassInterImplextendsObjectimplementsInter { publicInterImpl(){ super();//super实现的是object这个超级父类 } publicvoidmethod1() { System.out.println("实现类中的method1"); } publicvoidmethod2() { System.out.println("实现类中的method2"); } publicvoidshow() { System.out.println("实现类中的show"); } }
测试类:
publicclassTest { publicstaticvoidmain(String[] args) { //接口不能实例化 // Inter i = new Inter(); //通过多态的方法实 Interi=newInterImpl(); //访问成员变量 System.out.println(i.num1); //接口的常量是不能修改的 // i.num1 = 100; i.method1(); i.method2(); i.show(); } }
接口和抽象类的区别:
A:成员区别
抽象类:
成员变量:变量 或者 常量;
构造方法:有;
抽象类不能实例化;
成员方法:可以有抽象方法,也可以有非抽象方法。
接口:
成员变量:只可以静态常量 可以省略 static final;
构造方法:无;
接口不能实例化;
成员方法:只有抽象方法。 可以省略abstract!
B:关系区别
类与类
继承,单继承, 多层继承(爷->父->子->孙)
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承都可以
C:设计理念区别
抽象类【共性功能】。
接口【扩展功能】。
多实现的格式:(多继承也是一样的写法)
class类名 [extends父类名] implements接口名1,接口名2,接口名3... { // 重写接口中抽象方法【必须】 // 重写接口中默认方法【不重名时可选】}
总结:
- 接口中只有常量和抽象方法;
- 接口是没有静态代码块和构造方法的;
- 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
单继承多实现:
publicclassMyInterfaceImplimplementsMyInterfaceA, MyInterfaceB {
// 覆盖重写所有抽象方法
}
- 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
- 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。