java 8.0 关于接口可以有默认方法的小知识点
2018-01-17 16:30
393 查看
我们知道java中,是只能单继承(类与类之间)而可以多实现接口的,这是为什么呢?(接口和接口之间支持多继承)
1.举例,如果C类同时继承了A和B类,那么如果分别在A和B中定义了一样的方法
那么C 类根本就不知道应该调用哪个方法,因为父类中的方法可能初始化了一些数据,不能明确应该继承谁的方法,包括复写父类的方法时候,也是一样,不知道该复写谁的,所以,为了避免困扰,java中只支持单继承。
-----------------------------------------------------------------------------------------------------------
2.那么为什么接口可以同时多个实现呢,这是因为即便在A和B接口中定义了同样的方法,他们也没有具体的实现,接口中的方法都必须要是抽象(abstract)的,没有方法体(具体实现),所以子类实现接口之后,实现谁的方法都无所谓了,不会对功能有什么影响
but:java8.0之后,接口中可以定义默认方法了,格式如下:
default void defaultMethod(){
//方法体
}
默认方法必须有方法体,要么就是声明没有方法体的抽象方法 default和abstract不可同时修饰方法
同时该默认方法由实现类的实例对象来调用。
问题来了。。。
如果不同的接口定义了同样的默认方法,怎么办,答案是:
编译报错:说子类继承了“默认方法名”的不相关的默认值。。
ps:接口中也可以定义静态方法哦,可以有方法体,由接口名.来调用.
如果有疑问或者对你有点点帮助,希望你评论哦
1.举例,如果C类同时继承了A和B类,那么如果分别在A和B中定义了一样的方法
那么C 类根本就不知道应该调用哪个方法,因为父类中的方法可能初始化了一些数据,不能明确应该继承谁的方法,包括复写父类的方法时候,也是一样,不知道该复写谁的,所以,为了避免困扰,java中只支持单继承。
-----------------------------------------------------------------------------------------------------------
2.那么为什么接口可以同时多个实现呢,这是因为即便在A和B接口中定义了同样的方法,他们也没有具体的实现,接口中的方法都必须要是抽象(abstract)的,没有方法体(具体实现),所以子类实现接口之后,实现谁的方法都无所谓了,不会对功能有什么影响
but:java8.0之后,接口中可以定义默认方法了,格式如下:
default void defaultMethod(){
//方法体
}
默认方法必须有方法体,要么就是声明没有方法体的抽象方法 default和abstract不可同时修饰方法
同时该默认方法由实现类的实例对象来调用。
问题来了。。。
如果不同的接口定义了同样的默认方法,怎么办,答案是:
编译报错:说子类继承了“默认方法名”的不相关的默认值。。
ps:接口中也可以定义静态方法哦,可以有方法体,由接口名.来调用.
如果有疑问或者对你有点点帮助,希望你评论哦
相关文章推荐
- 关于java8接口中默认方法的使用
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- java8中接口中可以有方法实现
- 关于Java中的几种特殊类与接口,及特殊的创建实例的方法
- Java8新特性——接口的默认方法和类方法
- Java8新特性——接口的默认方法(扩展方法)
- java jar包命令行下可以双击不运行解决方法(改变java默认图标)
- Java8特性之接口的默认方法与静态方法
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- Java 8 接口里的默认方法特性研究
- 在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。手动产生堆栈文件的方法是使用kill -3
- Java 8 之接口中的默认方法与静态方法
- Java8接口的默认方法
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- java中为什么接口中的属性和方法都默认为public?
- Java8之默认方法和静态接口方法
- Java接口中的变量和方法默认的类型<转>
- Java8新特性--Interface中的default方法(接口默认方法)
- java代码关于匿名内部类和接口的方法使用