如何将子类对象转换为超类对象

Jas*_*son 5 java inheritance casting subclass superclass

我有 2 个类,称为超类和子类,我尝试将子类对象转换为超类,但是当我想使用超类中的子类对象时,它似乎不起作用。请帮忙解释一下。谢谢。这些是代码:-

public class superclass
{
    public void displaySuper()
    }
        System.out.println("Display Superclass");
    }
}

public class subclass extends superclass
{
    public void displaySub()
    {  
        System.out.println("Display Subclass");
    }
}


public class Testing
{    
   public static void main(String args[])
   {
      subclass sub = new subclass();
      superclass sup = (superclass) sub; 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用子类中的 displaySub() 时出现错误

      sup.displaySub(); //the displaySub method cant found
   }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ong 6

超类不能知道子类的方法。

这样想:

  • 你有一个超类 Pet

  • 你有两个子类Pet,即:CatDog

  • 两个子类将共享相同的特征,例如 speak
  • Pet超意识到这些,因为所有PetS能说话(即使它不知道此操作的确切机制)
  • ADog然而可以做猫不能做的事情,即eatHomework
  • 如果我们将 a 转换Dog为 a Pet,应用程序的观察者将不会意识到Pet实际上是 a Dog(即使我们作为实现者知道这一点)
  • 考虑到这一点,调用eatHomework一个Pet

你可以通过告诉程序你知道sup的类型来解决你的问题subclass

public class Testing
{    
   public static void main(String args[])
   {
      subclass sub = new subclass();
      superclass sup = (superclass) sub; 
      subclass theSub = (subclass) sup;
      theSub.displaySub();
   }
}
Run Code Online (Sandbox Code Playgroud)

您可以通过执行以下操作来完全解决问题:

public class superclass
{
    public void display()
    }
        System.out.println("Display Superclass");
    }
}

public class subclass extends superclass
{
    public void display()
    {  
        System.out.println("Display Subclass");
    }
}

public class Testing
{    
   public static void main(String args[])
   {
      subclass sub = new subclass();
      superclass sup = (superclass) sub; 
      sup.display();
   }
}
Run Code Online (Sandbox Code Playgroud)

查看本教程了解更多信息:覆盖