java - 当我尝试在基类方法中调用子类方法时,为什么会出现错误?
问题描述
这是我的代码:
public class Main {
public static void main(String args[]) {
A a = new A();
a.baseMethod();
}
}
class B{
public void baseMethod(){
System.out.println("B");
this.subMethod();
}
}
class A extends B{
public void subMethod(){
System.out.println("A");
}
}
/MyClass.java:14: 错误:找不到符号 this.subMethod();
^ 符号:方法 subMethod() 1 错误
我认为“this”指的是对象“a”,如果我把它放在 main 中它可以工作,并且类 Main 不会看到类 A,因为类 B 没有,那么为什么我不能调用子类方法呢?非常感谢
解决方案
实际上,在这种情况下,超类(A 类)可以访问驻留在基类(B 类)中的方法,但基类不能。如果你想通过调用超类(A类)的对象来访问基类(B类)方法,你可以。但是,如果您想通过调用基类的对象来访问超类(A 类)方法,则应该在超类中实现相同的方法签名。 “this”关键字表示调用它的相同对象引用(在您的情况下为 B 类对象)。
在两个类中具有相同签名的方法 (baseMethod) 后,您可以通过A a = new A();
和对其进行测试A b = new B();
。
继续编码:)
推荐阅读
- azure-data-studio - Azure Data Studio“未知属性 IsColumnSet”
- python - ModuleNotFoundError: No module named 'pyodbc' 虽然包成功安装
- c++ - JSON 请求在名称验证检查期间忽略“\”
- tensorflow - 保存 Keras 模型错误:AttributeError: 'numpy.dtype' object has no attribute 'item'
- java - 使用 javax.xml.transform.Transformer
- java - 哪种方法可以防止谷歌地图重新创建?
- java - 如何从数据库中忽略或删除第一行(Cucumber/java)
- c# - BinaryFormatter 在类更改后反序列化委托字段
- java - Head First Java-Page 192(混合消息)
- python - 根据日期键的值过滤字典