Java 继承接口同名函数问题
2017-02-19 11:42
211 查看
在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样?
动手做实验:
interface A{
void fun();
}
interface B{
void fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}运行截图:
![](https://img-blog.csdn.net/20170219114851751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVyZW5mYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上例的情况,可以正常编译运行,输出"hehe",因为A与B中的fun具有相同的签名(参数个数与类型相同)
interface A{
void fun();
}
interface B{
int fun(int x);
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe1");
}
@Override
public int fun(int x) {
return 0;
}
public static void main(String[] args) {
new Test().fun();
}
}
![](https://img-blog.csdn.net/20170219115432438?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVyZW5mYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上例也是可以编译运行的,因为A与B中的fun方法具有不同的函数签名,本质上是两个方法,分别实现即可。
interface A{
void fun();
}
interface B{
int fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}
![](https://img-blog.csdn.net/20170219120016259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVyZW5mYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
而这种具有相同函数签名,但不同返回值的方法,是没有办法编译的,接口C便已经无法编译。
动手做实验:
interface A{
void fun();
}
interface B{
void fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}运行截图:
上例的情况,可以正常编译运行,输出"hehe",因为A与B中的fun具有相同的签名(参数个数与类型相同)
interface A{
void fun();
}
interface B{
int fun(int x);
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe1");
}
@Override
public int fun(int x) {
return 0;
}
public static void main(String[] args) {
new Test().fun();
}
}
上例也是可以编译运行的,因为A与B中的fun方法具有不同的函数签名,本质上是两个方法,分别实现即可。
interface A{
void fun();
}
interface B{
int fun();
}
interface C extends A,B{
}
public class Test implements C{
@Override
public void fun() {
System.out.println("hehe");
}
public static void main(String[] args) {
new Test().fun();
}
}
而这种具有相同函数签名,但不同返回值的方法,是没有办法编译的,接口C便已经无法编译。
相关文章推荐
- 关于java中继承多接口实现其中同名方法的问题
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- 关于“JAVA中为什么没有了多继承并出现了接口”这一问题引发的一些思考
- java接口的继承问题
- Java中类继承、接口实现的一些要注意的细节问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- C++虚函数分析[1]--同名函数继承二义性问题
- Java 中继承之后同名静态变量的问题分析
- java的若干问题(1)——继承、多态、抽象类与接口
- 简单的java实验,涉及到 类继承以及接口问题,方法体的重写(区别于重载)
- java 继承类与接口问题
- Java中static方法、程序入口函数main方法的继承问题
- java中的接口和接口之间的继承问题
- java类继承中父类调用子类函数的问题
- java接口中多继承的问题
- 如果类a继承类b,实现接口c,而类b和接口c中定义了同名变量,请问会出现什么问题?(瞬联)
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- java中子类继承父类和实现接口有同名方法怎么处理
- java接口的继承问题
- JAVA基础知识点(六)--接口,多态,继承,抽象类,重载的问题