|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
原题: //file: MyMain.class class Base { int a=10; public void show() { System.out.println(a); } } class Ext extends Base { int a=200; public void show(String s) { System.out.println(s); } } public class MyMain { public static void main(String[] argv) { Ext obj=new Ext(); obj.show(); obj.show("OK"); } } 请问,执行上面程序,运行是什么? ======================== 关于这道题目,我给出了一个简朴的原则,现在有空顺便说 清晰一点这个有趣的现象。 首先要说明,我认为,属性并非不可以override, 成员变量是可以override的,但是成员变量是在编译时解析的 (而方式是在运行时解析的) 这样一来,当子类要引用父类对象的属性时,实际上它会屏蔽 自己的同名属性,只去访问父类对象的属性,所以直接引用 变量名和通过方式来获取变量的效果是不相同的, 这里有个异常好的例子,有时间好好看看,想想 public class Shadow { public static void main(String s[]) { S1 s1 = new S1(); S2 s2 = new S2(); System.out.println(s1.s); // prints S1 System.out.println(s1.getS()); // prints S1 System.out.println(s2.s); // prints S2 System.out.println(s2.getS()); // prints S2 s1 = s2; System.out.println(s1.s); // prints S1, not S2 - // since variable is resolved at compile time System.out.println(s1.getS()); // prints S2 - // since method is resolved at run time } } class S1 { public String s = "S1"; public String getS() { return s; } } class S2 extends S1{ public String s = "S2"; public String getS() { return s; } } 返回类别: 教程 上一教程: Stream Tokenizing(分解字符串) 下一教程: "package中的javac,java用法" && "制作可执行jar文件" 您可以阅读与"成员变量和方式的override的详解"相关的教程: · 用SERVLETS实现WEB方法的文件下传 · Java变量的缺省(默认)值--只有类的instance变量和static变量才有 · JSP三种页面跳转方法的比较 · java编写TCP方法的通信程序 · 详解如何利用iText在JSP中生成PDF报表 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |