请原谅任何小的语法错误或诸如此类的错误,我正在通过Jitsi模块遇到这个问题并且不熟悉Java,想要确认发生了什么以及为什么以及如何修复它.
public abstract class A
{
public A()
{
this.load();
}
protected void load()
{
}
}
public class B extends A
{
private String testString = null;
public B()
{
super();
}
@Override
protected void load()
{
testString = "test";
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序在使用按名称加载类方法创建类B的实例时执行此操作:
这是预期的Java行为吗?什么可能导致这个?它是在1.7 JDK上运行的Java 1.6应用程序.
所以,我有这个:
public class A {
public int a = 0;
public void m(){
System.out.println("A"+a);
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public class B extends A {
public int a = 5 ;
public void m (){
System.out.println("B"+a);
}
public static void main(String[] args) {
A oa = new A();
B ob = new B();
A oab = ob;
oa.m();
ob.m();
oab.m();
System.out.println("AA"+oa.a);
System.out.println("BB"+ob.a);
System.out.println("AB"+oab.a);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
A0
B5
B5
AA0
BB5
AB0
Run Code Online (Sandbox Code Playgroud)
我不明白为什么oab.m(); 输出是B5而不是A0.谁可以给我解释一下这个?