定义接口并测试

接口:描述不同类型具有相似的行为特征,建立关系后,以接口引用指向实现类的方式,去描述不同类型对于接口的具体表现

接口建立:public interface+接口名;接口内方法无方法体,与抽象方法相似但无abstract。

实现接口:public class+方法名+implements+接口名;类内必须具有接口中的方法。

接口:描述不同类型具有相似的行为特征,建立关系后,用接口引用指向实现类的方式,去描述不同类型与接口行为的具体表
实例化对象的方法,使用接口 对象名 = new 类名; 方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。
而使用类名 对象名 = new 类名;方式创建出来的对象可以调用所有的方法;当然使用接口的好处就是统一规范化;课程中,我们只需要调用接口中的方法,因此选择了

IPhoto ip = new FourthPhone();

另外通过接口创建对象,可以利用多态的特性进行代码的简化。

1、抽象类的存在是方便子类的继承,一个类只能继承自一个父类(可以是抽象类也可以是普通类),却可以实现多个接口;

2、抽象类中可以包含非抽象方法,即抽象类中的方法可以有实现体,但是JDK1.8以前接口中只能有抽象方法,即JDk1.8以前方法中不能有实现体,在JDK1.8以后接口中可以有default方法和静态方法,可以包含方法体,其余方法仍然只能是抽象方法。

3、抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。当关注事物的本质的时候,用抽象类;当关注一种操作的时候,用接口。

接口成员--抽象方法&常量

接口的访问修饰符为public,默认
接口中的抽象方法可以不写abstract,抽象方法访问修饰符默认为public,可以不写
当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类
接口中可以包含常量,默认public static final
通过接口名.常量,访问这个常量
当接口和实现类的常量重名时,

INet.TEMP;或
INet net = new SmartWatch();net.TEMP;

(上述两种情况中,即使类中同样有一个名为TEMP的常量,执行结果仍为接口里的常量)
(如下,可调用类中的TEMP)

SmartWatch sw = new SmartWatch();
sw.TEMP;

接口中的常量使用通常采用INet.TEMP方式,较少采用子类对象方式调用,然而从开发经验上,并不建议你把常量定义都在接口中,一般接口中定义的常量都是和接口中处理方法相关的常量,而常量推荐你定义在一个例如工具类中,统一维护管理。

接口成员--默认方法&静态方法

接口前面的访问修饰符:
1.public 默认

2.接口中抽象方法可以不写abstract关键字

3.访问修饰符默认public

4.当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类

5.接口中可以包含常量,默认public static final

6.当接口和实现类中有同名的常量时,根据调用的引用类型决定具体的值,引用类型为接口则调用接口的值,为实现类则调用实现类的值

7.jdk1.8 中default:默认方法,带方法体,不重写/不调用也不报错

8.static也可以带方法体,不重写/不调用也不报错

9.静态方法的调用:接口名.方法名()进行调用。但是不能被重写

10.默认方法的重写:调用接口中默认的方法 接口名.super.方法名();

关于多接口中重名默认方法处理的解决方案

(1) 在一个类中实现多个接口时, 接口中都有默认的同名抽象方法 ,则在类的实现过程中, 编译器会报错 , 需要在类自己的类中重写默认的同名方法 , 所以在主方法中调用的时候, 则为类中重写的默认方法.

(2) 在类中既可以继承父类又可以实现多个接口, extends一定在implements之前.如果在父类和接口中也有重名方法时, 在类中没有重写接口中的方法, 编译器也并不会报错 , 因为子类直接继承了父类的同名方法 ,可以视为重写了接口中的同名方法 ,而在子类中重写了该方法, 则用子类重写的方法, 原理就是在子类自己的方法 > 父类中的方法 > 接口中的方法 .

(3) 但是父类中和接口中重名的成员属性(不是方法!!)重名时, 编译器也会报错无法识别, 解决办法如(1)中, 在子类中重写定义该成员属性.

关于多接口中重名常量处理的解决方案

1.当一个子类同时继承父类和接口时,如果接口和父类中的方法同名,默认优先执行父类中的方法
2.如果继承的父类和接口中的常量同名,父类不占优势,会报错,只能在子类中创建独有的常量成员

接口的继承

1.接口可以继承,并且可以继承多个
2.父接口中有重名的默认方法,子类必须创建自己的default方法

最后修改:2019 年 12 月 31 日
如果觉得我的文章对你有用,请随意赞赏