java - 关于访问孩子的变量或方法
问题描述
我将在这里举一个例子。我知道雷神类中的那些方法将覆盖复仇者类中的方法。(我将跳过方法的主体)
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新手,请帮助我:)
感谢你们!!
解决方案
父类引用不能访问子类方法。如果您使用父类引用,则只能调用被覆盖的方法。
如果要使用子类方法,有两种选择。选项 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");
}
}
推荐阅读
- c++ - 结构的 C++ 向量,读取访问冲突
- python - 在for循环时在Flask-Jinja2中编码为utf-8二进制数据
- list - 使用动画切换器,它们存储在列表中
- django - 在 Geodjango 模型的传单地图中显示多边形
- database - 在 oracle 中创建同义词是否会自动授予对基础表的选择访问权限
- python - 从终端 pycharm 和 VS 和 VScode 运行 python 特定行
- django - Django Listview 分页;页面已正确分页,但 page_obj 在模板中不起作用
- php - parrot linux xampp PHP错误:没有显示
- matlab - 获取每列中第一次出现 1 的行号
- typescript - 如何将 NestJs 数据库模型项目导入另一个?