你的位置:首页 > 软件开发 > Java > java 多态骗局

java 多态骗局

发布时间:2012-03-10 13:00:06
[推荐]java 多态骗局http://bjnz8l9x.blog.sohu.com/198492811.html 照本去,先考考除夜荚冬正在没有匝弄的环境下讲出上里法式的输出成果(请先寄看那是闭于多态的啊) package acm;//例一class Test extends Main{private void write() {System.out. ...

[推荐]java 多态骗局

http://bjnz8l9x.blog.sohu.com/198492811.html

 

照本去,先考考除夜荚冬正在没有匝弄的环境下讲出上里法式的输出成果(请先寄看那是闭于多态的啊)

 

package acm;//例一

class Test extends Main

{

private void write()

       {System.out.println("Test");}

}

public class Main

{private void write()

       {System.out.println("Main");

}

public static void main(String[] args) {Main main = new Test();main.write();}}//我们所期看的是 输出Test,但因为private格式被自动觉得是final格式。而且对导出的类识坍篱的。是以//正在那类环境下,Test下的write便是一个齐新的格式,Main中的格式正在子类中格式没有恰好睹,是以也没有能被重载//只要非private 格式才气够被覆盖 。是以成果是:Main//例两class Super {public int field = 0;public int getField() {return field;}}class Sub extends Super {public int field = 1;public int getField() {return field;}public int getSuperField() {return super.field;}}public class Main {public static void main(String[] args) {Super sup = new Sub();System.out.println("sup.field= " + sup.field + ",sup.getField()="+ sup.getField());Sub sub = new Sub();System.out.println("sub.field= " + sub.field + ",sub.getField()="+ sub.getField() + ",sub.getSuperField()="+ sub.getSuperField());}}//当Sub工具转型为Super援引时,<a href="http://www.qq-mail-server.cn/" title="注册码" target="_blank ">注册码</a>任何域访谒独霸皆将由编译器解析,是以没有是多态的。<a href="http://www.codeprojectcom.com/" title="Program Source code" target="_blank ">Program Source code</a>//正在本例中,为Super.field战Sub.field分拨了没有开的存储空间。何等,Sub真践上搜罗两个称为field的域://它自祭阅战它从Super处得到的。成果://sup.field= 0,sup.getField()=1//sub.field= 1,sub.getField()=1,sub.getSuperField()=0//例三class Glyph {void draw() {System.out.println("Glyph.draw()");}Glyph() {System.out.println("Glyph() before draw()");draw();System.out.println("Glyph() after draw()");}}class RoundGlyph extends Glyph {private int radius = 1;RoundGlyph(int r) {radius = r;System.out.println("RoundGlyph.RoundGlyph(),radius=" + radius);}void draw() {System.out.println("RoundGlyph.draw(),radius=" + radius);}}public class Main {public static void main(String[] args) {new RoundGlyph(5);}}//当Glyph 的构建器挪用draw()时,radius 的值以致没有是默许的初初值1,而是 0。//上一篇沃章仿的所述初初化按序是没有周齐的,真践进程是何等的: //(1) 正在回支其他任何操纵之前,为工具分拨的存储空间初初化成两进制整。 //(2) 挪用根柢类构建器。此时,被覆盖的draw()格式会得到挪用(简直是正在RoundGlyph构建器挪用之前),//此时会收现radius的值为 0http://www.qq-mail-server.cn/,那是因为轨范(1)酿秤弈。 //(3) 依照本去声明的按序挪用成员初初化代码。 //(4) 挪用衍死类构建器的主体。 //成果://Glyph() before draw()// RoundGlyph.draw(),radius=0// Glyph() after draw()// RoundGlyph.RoundGlyph(),radius=5
以上均由远期读Thinking in Java所得

 

C/C++、VC MFC、CUDA、3D虚拟仿真一起QQ聊:64616914。QQ群194134342

原标题:java 多态骗局

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。