首页 > 解决方案 > 关于访问孩子的变量或方法

问题描述

我将在这里举一个例子。我知道雷神类中的那些方法将覆盖复仇者类中的方法。(我将跳过方法的主体)

Class Avengers{

   void hit(){
   }
   void walk(){
   }
}

Class Thor extends Avengers{

   void hit(){
   }
   void walk(){
   }
   void thunderSkill(){
   }
} 

这是主要的。

public static void main(String[] args) {
Avengers thor = new Thor();
}

如果我这样做,使用“thor”实例,我可以访问那些 hit() 方法和 walk() 方法。但我无法访问 ThunderSkill() 方法。我意识到只能访问覆盖方法。我的问题是,有没有办法在不覆盖 Parent 类、Avengers 类中的 ThunderSkill 的情况下访问 ThunderSkill 方法?

所以如果它有其他的英雄,比如雷神、钢铁侠、美国队长……等等,他们都应该有自己独特的方法。如果我想通过实例访问它,这些所有独特的方法是否需要在父类 Avengers 类中?(我正在尝试将实例的数据类型设置为“复仇者联盟”,这样我就可以轻松处理“参数”和“参数”。)

我是Java新手,请帮助我:)

感谢你们!!

标签: javaobjectinheritanceinstance

解决方案


父类引用不能访问子类方法。如果您使用父类引用,则只能调用被覆盖的方法。

如果要使用子类方法,有两种选择。选项 1:在 Overridden 方法中调用子方法。(简单的一个)选项2:您可以使用子类对象转换父类引用,并且可以调用子类方法。这是选项 2 的示例代码。

我建议你仔细阅读这个关于继承的 java 文档。 https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

public class Parent {

    public void canSpeak() {
        System.out.println("I can speak");
    }

    public static void main(String[] args) {

        Parent p = new Child();
        p.canSpeak();

        // p.canRead()  // can not be accessed. because the refernece is parent.
        // if you want to access the canRead() method in child class, then you need to case the object.

        Child c = (Child)p;
        c.canRead();
    }
}

public class Child extends Parent {
    /**
     * This is the overridden method.
     */
    @Override
    public void canSpeak() {
        System.out.println("I can speak");
    }
    /**
     * Only child can read.
     */
    public void canRead() {
        System.out.println("I can read");
    }
}

推荐阅读