java中造型的问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 22:50:32
class TestA {
public void start() {
System.out.println("TestA");
}
}
public class TestB extends TestA {
public void start() {
System.out.println("TestB");
}
public static void main(String[] args) {
((TestA)new TestB()).start();
}
}
按道理说TestB的对象已经被造型成TestA了啊,start方法应该是TestA里面的吧?为什么输出的是TestB呢?那么((TestA)new TestB())有什么意义呢?可否举个例子说明一下?

TestB tb = new TestB();
B instanceof TestA条件为真

((TestA)new TestB()).start();
和下面这句
new TestB().start()
其实是一样的

强制类型转换在这里并没有起到作用,因为TestB的实例本来也就是TestA类型的

强制类型转换用在从collection中取出对象时转换

Vector vet2=new Vector();

for(j=0;j<vet2.size();j++)
{
out.println((YOURCLASS)vet2.get(j));
}

因为你new的TestB呗,这个就是多态吧

((TestA)new TestB()).
TestA是TestB的父类,也是问题的关键。因为父类可以调用子类的构造方法。但是要注意到是当用子类的构造方法构造出来的父类对象。它属于父类不是子类。这种对象只能调用父类本身的变量和方法,不能调用子类新增的方法。当子类出现方法的重写时,系统自动调用被重写的方法。这中情况在Java中很常见。建议你研究研究Java的接口,和多态。