当前位置: 技术问答>java相关
测试你的java掌握的基础的问题
来源: 互联网 发布时间:2015-04-18
本文导语: 给出你的答案和你认为这个题目要考的重点是什么 ----------- public class Shadow { public static void main(String s[]) { S1 s1 = new S1(); S2 s2 = new S2(); System.out.println(s1.s); System.ou...
给出你的答案和你认为这个题目要考的重点是什么
-----------
public class Shadow {
public static void main(String s[]) {
S1 s1 = new S1();
S2 s2 = new S2();
System.out.println(s1.s);
System.out.println(s1.getS());
System.out.println(s2.s);
System.out.println(s2.getS());
s1 = s2;
System.out.println(s1.s);
System.out.println(s1.getS());
}
}
class S1 {
public String s = "S1";
public String getS() {
return s;
}
}
class S2 extends S1{
public String s = "S2";
public String getS() {
return s;
}
}
-----------
public class Shadow {
public static void main(String s[]) {
S1 s1 = new S1();
S2 s2 = new S2();
System.out.println(s1.s);
System.out.println(s1.getS());
System.out.println(s2.s);
System.out.println(s2.getS());
s1 = s2;
System.out.println(s1.s);
System.out.println(s1.getS());
}
}
class S1 {
public String s = "S1";
public String getS() {
return s;
}
}
class S2 extends S1{
public String s = "S2";
public String getS() {
return s;
}
}
|
GJA106(中文字符)的答案正确。
重点在于:类的继承中,域的隐藏和方法的覆盖
域的隐藏:父类的域在子类对象中任占有自己的独立内存空间;
方法的覆盖:父类方法在子类中不复存在
所以:
s1 = s2; //s1,s2指向同一个对象,该对象中同时存在两个s
System.out.println(s1.s); //s1调用的是类S1的域s
System.out.println(s1.getS()); //S2的对象只有一个getS()可调用,
//并且子类自己的方法操作的是子类自己的域
会有这样的结果:
S1
S2
重点在于:类的继承中,域的隐藏和方法的覆盖
域的隐藏:父类的域在子类对象中任占有自己的独立内存空间;
方法的覆盖:父类方法在子类中不复存在
所以:
s1 = s2; //s1,s2指向同一个对象,该对象中同时存在两个s
System.out.println(s1.s); //s1调用的是类S1的域s
System.out.println(s1.getS()); //S2的对象只有一个getS()可调用,
//并且子类自己的方法操作的是子类自己的域
会有这样的结果:
S1
S2
|
notice declaration :S1 s1
if the code is : (S2) s1=s2;
then print s2
if the code is : (S2) s1=s2;
then print s2
|
考查的重点在于:s1 = s2;
原始数据类型在JAVA中是引用,也就是说它不会被改变,这一点同C语言。
而对象则对应的是同一个区域,所以它必定会被改变,主要是对"=" 和"clone()"的区别。
所以答案为
S1
S1
S2
S2
S1
S2
原始数据类型在JAVA中是引用,也就是说它不会被改变,这一点同C语言。
而对象则对应的是同一个区域,所以它必定会被改变,主要是对"=" 和"clone()"的区别。
所以答案为
S1
S1
S2
S2
S1
S2