java - Java 中的继承和方法

标签 java inheritance

  public class TestBoss {

      public static void main(String[] args) {
                  Worker duck = new Worker();

                  (Boss) duck.type();
       }

 public class Boss{
       //stuff
 }

 public class Worker extends Boss{
       public void type(){
        //stuff
       }
 }

如果有一个叫做 boss 的父类(super class)和一个叫做 worker 的子类。那么如果有一个测试类需要使用worker类中的一个方法。本例中的对象 duck 被类型转换为 Boss/但在代码中,类型方法只能在 worker 类中使用,而不能在 boss 类中使用。然而 java 要求 Boss 类包含类型方法,即使它没有被使用。如何使方法只在 worker 类中声明,或者 boss 类是否需要一个基本上什么都不做的填充方法?

最佳答案

如果只有 Worker 公开方法 type() 那么您需要在使用它之前将您的对象转换回 Worker。例如

Worker duck = new Worker();
...
Boss boss = (Boss)duck;
...
if (boss instanceof Worker) // check in case you don't know 100% if boss is actually a worker
{
    (Worker)boss.type();
}

关于java - Java 中的继承和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629999/

相关文章:

java - 同构字符串的时间复杂度

java - 如何将 Apache ZooKeeper 与 Spring Cloud 服务发现和负载均衡结合使用?

c++ - 将模板传递给函数而不指定具体类型

c++ - 派生类可以使用基类的友元函数吗?

java - 为什么代码在多个线程中与 HashMap.put() 一起挂起?

java - 无法使用可执行文件/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java 确定 Java 版本

java - 无法安装Weblogic服务器12C,jar文件甚至无法打开

c++ - 如何在 C++ 中使用基类的构造函数和赋值运算符?

C# Diamond-Inheritance(接口(interface)实现)

java - 在延迟初始化和一般情况下,覆盖可以有效替代 if 语句吗?