有人可以解释下面代码的结果,或者至少告诉我需要阅读的文档才能理解它。
我是初学者,对java有一些非常基本的知识。
以下是代码:
class A {
public int key;
public void f() { key=key+1; }
}
class B extends A {
public void f() { key = key+10; }
}
public class Problem1 {
public static void main(String[] args) {
B P= new B();
P.key = 0;
A Q = P;
A R = new A();
R.key = 8;
P.f();
Q.f();
R.f();
System.out.println(P.key);
System.out.println(Q.key);
System.out.println(R.key);
}
}
结果:
20
20
9
提前致谢!
答案 0 :(得分:1)
所以这看起来像是一个非常基本的继承示例,父类是" A"
public int key;
这称为Field,它只是一个类中的变量。下一行是一个函数
public void f() { key=key+1; }
这是一种可用于A对象的方法。当你调用f()时,它会增加变量' key'
下一个类是A的子函数,我们知道这是因为" extends"关键词。当一个类是子函数时,它具有所有相同的函数(因此称为继承),还有它自己的一些函数。这意味着类型B的对象将具有一个名为key的字段,因为它是其父类所具有的。
在类B中,还有另一个方法f(),它将键递增10.注意方法f()被重载,这意味着类中的两个方法具有相同的名称,但是隐式定义的参数不同。因此,如果将f()调用为A类型的对象,则会将键增加1,如果使用类型B的对象调用它,则会将键增加10。
public class problem1{
测试数据类型A和B.了解这一点,尝试跟踪problem1的输出。
答案 1 :(得分:0)
为了明确这个问题,我建议你阅读有关Java Reference/Object& method override首先。
以下是代码中每个步骤的说明: