当前位置: 首页 > 知识库问答 >
问题:

为什么我不能使用引用子类型实例的父类型的引用来调用子类方法?

贾骏喆
2023-03-14

我在学习Java,同时试图理解继承。我不明白为什么子类walk()中重写的方法执行了,而另一个xyz()方法却没有执行。

   class Person{
     public void walk() { System.out.println("walking like a person "); }
   }

   public class Soldier  extends Person{
    @override
    public void walk() { System.out.println("marching like a  soldier "); }
    public void xyz()   { System.out.println("xyzng like a pro"); }

    public static void main(String[] args) {

        Person sp = new Soldier();
        sp.walk(); 
        sp.xyz();
     }
   }

我的问题是,如果下面的方法调用工作正常,并调用士兵方法walk,

    sp.walk(); 
    sp.xyz();

共有1个答案

司空宗清
2023-03-14

编译时,父类引用'sp'只能看到它内部的方法。如果要作为((士兵)sp).xyz()访问

 类似资料:
  • 既然这个对象(在标题中说明)可以调用子类中的重写方法,为什么它不能调用子类的其他方法?我需要尽可能详细的回答,比如内存组织,JVM中的内部逻辑等。 下面的代码会让你清楚地理解我的问题。

  • 问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但

  • 问题内容: 我有这样的代码: 为什么我不能在第(5)行中打电话;在第(6)行中将为哪个类调用? 问题答案: 您不能这样做,因为子类的方法不在您的超类中。在这种情况下,尽管String是Object的子类,因为在java.lang.Object类中未声明length(),但无法在其实例上调用length。 但是equals()方法在字符串类中被覆盖,因此将调用Strings的equals()

  • 问题内容: 对象a2的类型为A,但引用了类C的对象。因此,a2应该能够访问m3()。但是,为什么不发生呢?如果在类A中定义了m3()方法,则代码可以正常运行 问题答案: 这意味着您只能访问Class的成员和Class的实现(如果有的话)。 现在m3不是的成员。清楚吗?

  • 这是我的代码想要使用AdapterVersion(父类)的对象引用访问AdapterVer1 getAdaptObj1()的子类方法(没有类型转换)

  • 给定以下代码,ReSharper会给出错误 null