当前位置: 技术问答>java相关
請問誰能描述一下這道SCJP題的運行過程?
来源: 互联网 发布时间:2015-05-01
本文导语: what output for following code: class Base { int x=3; public Base() {} public void show() { System.out.print(" The value is " + x); } } class Derived extends Base { int x=2; public Derived() {} public void show() { System.out.print(...
what output for following code:
class Base {
int x=3;
public Base() {}
public void show() {
System.out.print(" The value is " + x);
}
}
class Derived extends Base {
int x=2;
public Derived() {}
public void show() {
System.out.print(" The value is " + x);
}
}
public class Test {
public static void main(String args[]) {
Base b = new Derived();
b.show();
System.out.println("The value is " +b.x);
}
}
The answer:The value is 2The value is 3
class Base {
int x=3;
public Base() {}
public void show() {
System.out.print(" The value is " + x);
}
}
class Derived extends Base {
int x=2;
public Derived() {}
public void show() {
System.out.print(" The value is " + x);
}
}
public class Test {
public static void main(String args[]) {
Base b = new Derived();
b.show();
System.out.println("The value is " +b.x);
}
}
The answer:The value is 2The value is 3
|
其实很简单的,你要记住的就是在
类的继承中方法是被覆盖的,属性是被隐藏的
就可以了
1、首先看main中的Base b=new Derived(); 实例化了Derived类
class Derived extends Base {
int x=2;
public Derived() {}
public void show() {
System.out.print(" The value is " + x);
}
}
在这个Derived类中首先执行其构造函数 public Derived(){},而在这个构造函数的第一行默认调用其超类的构造函数,于是执行public Base() {}。
2、回到main里面b.show();被执行,由于类Derived继承了Base类,而Derived类和Base类都有同一个方法show(),所以Derived类的show方法覆盖了Base类的show方法,所以调用的是这个语句
public void show() {
System.out.print(" The value is " + x);
}
那么究竟打印出来的x是子类的值还是父类的值呢,由于在继承的时候成员变量即属性是被隐藏的所以当前只有子类的属性被调用即int x=2;
这样The value is 2就被打印出来了。
3、回到main中 System.out.println("The value is " +b.x);被执行
这个b是什么类型的呢,可以看main里面的第一条语句
Base b = new Derived();
很显然b是Base类型的,那么由于属性是被隐藏的,所以b.x中的x调用Base的属性int x=3;
这样The value is 3被打印出来的
所以最后的结果是:
The value is 2The value is 3
类的继承中方法是被覆盖的,属性是被隐藏的
就可以了
1、首先看main中的Base b=new Derived(); 实例化了Derived类
class Derived extends Base {
int x=2;
public Derived() {}
public void show() {
System.out.print(" The value is " + x);
}
}
在这个Derived类中首先执行其构造函数 public Derived(){},而在这个构造函数的第一行默认调用其超类的构造函数,于是执行public Base() {}。
2、回到main里面b.show();被执行,由于类Derived继承了Base类,而Derived类和Base类都有同一个方法show(),所以Derived类的show方法覆盖了Base类的show方法,所以调用的是这个语句
public void show() {
System.out.print(" The value is " + x);
}
那么究竟打印出来的x是子类的值还是父类的值呢,由于在继承的时候成员变量即属性是被隐藏的所以当前只有子类的属性被调用即int x=2;
这样The value is 2就被打印出来了。
3、回到main中 System.out.println("The value is " +b.x);被执行
这个b是什么类型的呢,可以看main里面的第一条语句
Base b = new Derived();
很显然b是Base类型的,那么由于属性是被隐藏的,所以b.x中的x调用Base的属性int x=3;
这样The value is 3被打印出来的
所以最后的结果是:
The value is 2The value is 3
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。