因为a是个空类,输出的是随机的哈希码
类型转换
1
package Lian;
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
// d=m;
d=(Dog)m;
//d=c;
//c=(Cat)m;
}
}
此段没有报错
2
package Lian;
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
d=m;
//d=(Dog)m;
//d=c;
//c=(Cat)m;
}
}
这时候报错了,原因是=m; 这是将Mammal类型的m赋给Dog类型的变量d,这会导致编译错误。不能将父类引用直接赋值给子类对象。
3
package Lian;
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
// d=m;
//d=(Dog)m;
d=c;
//c=(Cat)m;
}
}
报错,d = c:这行代码试图将一个Cat对象引用赋值给Dog对象引用,这是不允许的,因为Cat和Dog是不同的类。
4
package Lian;
class Mammal{}
class Dog extends Mammal {}
class Cat extends Mammal{}
public class TestCast
{
public static void main(String args[])
{
Mammal m;
Dog d=new Dog();
Cat c=new Cat();
m=d;
// d=m;
//d=(Dog)m;
//d=c;
c=(Cat)m;
}
}
此代码正确