l******7 发帖数: 311 | 1 我不明白为什么这个程序运行的结果是 “DemoC#" 而不是 “DemoC++”
package poly;
interface XInterface{
public abstract void runDemo();
}
abstract class XClass implements XInterface{
String s="Java";
public abstract void runDemo();
{s="C++";}
}
public class YClass extends XClass implements XInterface{
{s = "C#";}
public void runDemo(){
System.out.println("Demo"+super.s);
}
public static void main(String args[]){
XInterface xi=new YClass();
xi.runDemo();
}
} |
b******u 发帖数: 469 | 2 是YClass的变量
【在 l******7 的大作中提到】 : 我不明白为什么这个程序运行的结果是 “DemoC#" 而不是 “DemoC++” : package poly; : interface XInterface{ : public abstract void runDemo(); : } : abstract class XClass implements XInterface{ : String s="Java"; : public abstract void runDemo(); : {s="C++";} : }
|
l******7 发帖数: 311 | 3 可是用了 super.s,这里super没作用么?
【在 b******u 的大作中提到】 : 是YClass的变量
|
X****r 发帖数: 3557 | 4 YClass并没有override XClass里的s。YClass里的{s = "C#";}操作的就是
XClass里的同一个s,所以super.s和s是一回事。
想象一下把XClass里的{s="C++";}和YClass里的{s = "C#";}移到各自的
constructor里就明白了。
【在 l******7 的大作中提到】 : 可是用了 super.s,这里super没作用么?
|
l******7 发帖数: 311 | 5 谢谢。
【在 X****r 的大作中提到】 : YClass并没有override XClass里的s。YClass里的{s = "C#";}操作的就是 : XClass里的同一个s,所以super.s和s是一回事。 : 想象一下把XClass里的{s="C++";}和YClass里的{s = "C#";}移到各自的 : constructor里就明白了。
|