请问一个父类实现子类接口的情况

kuchiki723 2021-04-15 09:43:46
请教各位java大神,如果父类Parent有一个方法public void a(){},有一个子类Child继承父类Parent,同时实现接口IChild,IChild内定义了一个方法void a(),按道理来说,Child并没有实现接口中的方法,但是由于碰巧从父类继承了一个名字一样的方法,所以编译并没有报错,这样做有问题么,虽然可以运行,但是从java的运行原理机制上是否会有问题,性能是否会有影响?

public class Parent {
public void a(){
System.out.println("a");
}
}

public interface IChild {
void a();
}

public class Child extends Parent implements IChild{
}

public class Main {
public static void main(String[] args) {
Child c = new Child();
c.a();
}
}
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
宾灬 2021-04-23
  • 打赏
  • 举报
回复
不会有问题。
kuchiki723 2021-04-16
  • 打赏
  • 举报
回复
引用 1 楼 qybao 的回复:
父类实现子类接口?你这个问题描述有问题。 应该是,子类继承父类并实现和父类方法同名的接口。 如果这两个方法没有冲突(符合同名函数重载),从语法到运行机制来说都没问题,更不会有所谓的性能问题(性能问题不会因为方法同名而引起,而是和你方法内部的实现逻辑以及访问的资源相关)。
追问一个问题,java的内部机制是如何从接口找到具体实现类执行的,是直接通过名称+参数的方式进行匹配的么?如果是这样,那这个和golang的机制倒是有些相似,只要名字参数对得上即可,接口和实现没有强关联
EngineZhang 2021-04-16
  • 打赏
  • 举报
回复
子类继承的方法a实现了IChild接口中定义的方法。 这个不会产生你担忧的问题的。
qq_39936465 2021-04-16
  • 打赏
  • 举报
回复
引用 楼主 kuchiki723 的回复:
请教各位java大神,如果父类Parent有一个方法public void a(){},有一个子类Child继承父类Parent,同时实现接口IChild,IChild内定义了一个方法void a(),按道理来说,Child并没有实现接口中的方法,但是由于碰巧从父类继承了一个名字一样的方法,所以编译并没有报错,这样做有问题么,虽然可以运行,但是从java的运行原理机制上是否会有问题,性能是否会有影响? public class Parent { public void a(){ System.out.println("a"); } } public interface IChild { void a(); } public class Child extends Parent implements IChild{ } public class Main { public static void main(String[] args) { Child c = new Child(); c.a(); } }
你这个首先叙述是有问题的,你现在是一个类同时继承类和接口,子类没有方法,但是可以继承使用父类方法。子类需要实现接口的方法,碰巧父类方法和需要实现的方法同名,所以子类即由父类方法实现接口的方法。一般不是特殊场景应该不会进行这种设计。可以通过父类继承接口,然后子类继承父类来实现。
qybao 2021-04-16
  • 打赏
  • 举报
回复
父类实现子类接口?你这个问题描述有问题。 应该是,子类继承父类并实现和父类方法同名的接口。 如果这两个方法没有冲突(符合同名函数重载),从语法到运行机制来说都没问题,更不会有所谓的性能问题(性能问题不会因为方法同名而引起,而是和你方法内部的实现逻辑以及访问的资源相关)。
qq_39936465 2021-04-16
  • 打赏
  • 举报
回复
引用 4 楼 kuchiki723 的回复:
追问一个问题,java的内部机制是如何从接口找到具体实现类执行的,是直接通过名称+参数的方式进行匹配的么?如果是这样,那这个和golang的机制倒是有些相似,只要名字参数对得上即可,接口和实现没有强关联
虽然显示的是接口类,但是它的实现是有实现类的,就是个是多态,不会去自己匹配,根据你这个接口变量对应的实现类来。 接口类型 接口变量 = new 实现类

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧