Java 关于访问child';s变量或方法

Java 关于访问child';s变量或方法,java,object,inheritance,instance,Java,Object,Inheritance,Instance,我在这里举个例子。 我知道Thor类中的那些方法将覆盖Avengers类中的方法。(我将跳过方法的主体) 这是主要的 public static void main(String[] args) { Avengers thor = new Thor(); } 如果我这样做,使用“thor”实例,我可以访问那些hit()方法和walk()方法。但我无法访问Thunderkill()方法。我意识到只有重写方法才能被访问。我的问题是,有没有办法在不重写父类复仇者类中的Thunderkill的情况下访

我在这里举个例子。 我知道Thor类中的那些方法将覆盖Avengers类中的方法。(我将跳过方法的主体)

这是主要的

public static void main(String[] args) {
Avengers thor = new Thor();
}
如果我这样做,使用“thor”实例,我可以访问那些hit()方法和walk()方法。但我无法访问Thunderkill()方法。我意识到只有重写方法才能被访问。我的问题是,有没有办法在不重写父类复仇者类中的Thunderkill的情况下访问Thunderkill方法

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

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


谢谢大家

父类引用无法访问子类方法。如果使用父类引用,则只能调用重写的方法

如果要使用子类方法,有两个选项。 选项1:调用重写方法内的子方法。(简单的一个) 选项2:可以使用子类对象强制转换父类引用,也可以调用子类方法。下面是选项2的示例代码

我建议您阅读有关继承的java文档。


你能做的就是使用接口。例如,定义:

public interface Superhero {
    void superpower();
}
然后让雷神实施超级英雄,并像实施雷霆杀戮一样实施超级力量

为了让英雄拥有更大的力量,您可以使用另一个界面:

public interface Superpower {
    void useSuperpower();
}

然后让
raundkill
实现
Superpower
,让
Avenger
类拥有一个
列表,您可以相应地填充该列表。

为什么
Avengers
类会意识到
raundkill
?并非所有的复仇者都有雷击技能。也许复仇者都有一个
SpecialAtack()
,或者他们的
hit()
方法有时可能会在条件合适的时候调用类似
this.reotkill()
if(this.wearm.getName()=“StormBreaker”){this.reotkill();}else{this.punch();}
if(thor instanceof复仇者)(雷霆杀手
强制转换几乎从来都不是一个好主意,尤其是在这样一个简单的场景中。我更喜欢选项1。但是,选项2是访问子类方法的另一种方式。如果您明确知道父类引用引用了哪个子对象,那么我看不到强制转换有任何问题。哦,强制转换!您的答案很容易理解,谢谢你,科德!我差点就明白你的答案了,但是..我想我需要一个代码解释而不是口头的..如果你不是我的,请你用代码解释一下好吗?用施法的方式,比如“科德”的答案,对我来说似乎更容易一些,但是有人说施法从来都不好。所以我试着理解你的答案)非常感谢!
public interface Superhero {
    void superpower();
}
public interface Superpower {
    void useSuperpower();
}