易截截图软件、单文件、免安装、纯绿色、仅160KB

Java向上转型

通俗理解向上转型:
就是子类转型成父类。
class A{}
class B extends A { }
A b = new B();
这个就是向上转型。
向上转型可以像下面这条语句这么简单:
      Shape s =new Circle();
      这里,创建一个Circle对象,并把得到的引用立即赋值给S矇,这样做看似错误(将一种类型赋值给别一种类型);但实际上没有问题,因为通过继承,Circle就是一种Shape。因此,编译器认可这条语句,也就不会产生错误信息。
      假设你调用一个基类方法(它已经在导出类中被覆盖);
      s.draw();
      你可能再次认为调用的是Shape的draw();因为这毕竟是一个Shape引用,那么编译器是怎样知道去做其它的事情呢?由于后期绑定(多态),还是正确调用了Circle.draw()方法。
总结
1、通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。
DerivedC c2=new DerivedC();
BaseClass a1= c2; //BaseClass 基类,DerivedC是继承自BaseClass的子类
a1.play(); //play()在BaseClass,DerivedC中均有定义,即子类覆写了该方法
分析:
* 为什么子类的类型的对象实例可以覆给超类引用?
自动实现向上转型。通过该语句,编译器自动将子类实例向上移动,成为通用类型BaseClass;
* a.play()将执行子类还是父类定义的方法?
子类的。在运行时期,将根据a这个对象引用实际的类型来获取对应的方法。所以才有多态性。一个基类的对象引用,被赋予不同的子类对象引用,执行该方法时,将表现出不同的行为。
在a1=c2的时候,仍然是存在两个句柄,a1和c2,但是a1和c2拥有同一块数据内存块和不同的函数表。
2、不能把父类对象引用赋给子类对象引用变量
BaseClass a2=new BaseClass();
DerivedC c1=a2;//出错
在java里面,向上转型是自动进行的,但是向下转型却不是,需要我们自己定义强制进行。
c1=(DerivedC)a2; 进行强制转化,也就是向下转型.
3、记住一个很简单又很复杂的规则,一个类型引用只能引用引用类型自身含有的方法和变量。
你可能说这个规则不对的,因为父类引用指向子类对象的时候,最后执行的是子类的方法的。
其实这并不矛盾,那是因为采用了后期绑定,动态运行的时候又根据型别去调用了子类的方法。而假若子类的这个


相关文档:

十四种Java开发工具点评

  1、JDK (Java Development Kit)   SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK)。开发人员和最终用户可以利用这个工具来开发java程序。   JDK简单易学,可以通过任何文本编辑器(如:Windows 记事本、UltrEdit、Editplus、FrontPage以及dreamweaver等)编写Java源文件, ......

JAVA里的PING和TELNET

JAVA里的PING是在JDK 1.5后用了新的函数isreachable去实现,具体介绍如下:
InetAddress对象的常用方法

InetAddress类有很多
get
方法,用来获取主机名,主机地址等信息。主要有:
byte[] getAddress() 返回次
InetAddress
对象的原始
IP
地址,保存为一个
byte
数组
String getCanonicalHostName() 获取此
I ......

JAVA新手起步

        如果从翻看Thinking in java 这书算起,那我已经看了差不多三个月了,但是事实上真正把花在思考JAVA问题上的时间算下,可真是让自己都有点说不过去。种种理由都充斥着我的神经,但无非都是懒惰者的自我保护的手段,我不得不感慨真的是自己太不上进了。
   &nbs ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号