ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java抽象类实现了一个接口,两者都有相同的方法

2019-05-29 16:49:58  阅读:428  来源: 互联网

标签:java oop interface multiple-inheritance abstract-class


在看一些OOP材料时,我想到了这个让我感到困惑的问题:

考虑使用以下接口,抽象类和具体类:

package one;

public interface A {

    void doStuff();
}

package one;


public abstract class B implements A {

    public abstract void doStuff();


}

class C extends B{


    public void doStuff() {

    }
 }

除非为方法doStuff()提供实现,否则C类将无法编译.
这里的问题是:

1-C类中的doStuff()方法是接口A方法的实现,还是B类中的抽象方法?更具体一点:JVM将如何
将函数视为接口或抽象类的调用函数?

2 – 抽象类B中的抽象方法doStuff()被认为是接口A中doStuff()方法的“实现”吗?所以这使得C类必须实现抽象类的doStuff()而不是接口的版本?

解决方法:

在界面中,所有方法都是公共的和抽象的.

知道这一点,接口A的doStuff实际上是public abstract void doStuff().这应该看起来很熟悉,因为抽象类B具有相同的方法签名.

要回答问题1,B类的doStuff()与接口A的doStuff()相同.由于Java中的所有方法都是virtual,因此无论C是否被声明为A,B或C,调用doStuff()都是相同的.

至于问题2,没有. B的doStuff()是冗余代码,实际上并没有做任何事情.无论B是否声明doStuff(),C都在实现A的doStuff().

标签:java,oop,interface,multiple-inheritance,abstract-class
来源: https://codeday.me/bug/20190529/1179352.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有