java中引用类型的强制转换

public class TestPerson {

	public static void main(String[] args) {
		// 向上类型转换,正常运行
		Animal a = new Cat();
		a.show();
		// 向下类型转换,正常运行
		Animal cat = new Cat();
		Cat cat2 = (Cat) cat;
		cat2.show();
		// 运行时异常
		Cat cat3 = (Cat) new Animal();
		cat3.show();
		// 正常运行
		Cat cat4 = (Cat) getAnimal(a);
		cat4.show();
		// 运行异常
		Cat cat5 = (Cat) getAnimal();
		cat4.show();

	}

	public static Animal getAnimal(Animal a) {
		return a;
	}

	public static Animal getAnimal() {
		return new Animal();
	}
}

class Animal {
	public void show() {
		System.out.println("Animal");
	}
}

class Cat extends Animal {
	public void show() {
		System.out.println("Cat");
	}
}

我的疑惑是:明明都是强制转换,为什么有的会报异常,有的却可以正常进行?主要是异常的部分。

注:我能理解向上类型转换以及向下类型转换正常运行的代码,只是不理解那些异常的代码。

请大神讲解,感激不尽

qq_阳光下的海风_0
浏览 1842回答 5
5回答

dky

强制类型转换的前提是,   对象本身的类型就是你要转换的类型,但是在java中,继承和多态的特性让我们在定义函数的参数和返回值的时候往往是定义其父类,比如说,什么肤色的人都能坐飞机,你在飞机上随机挑选一个乘客,你说这个乘客是黑人,这个命题事件成立的前提是这个人本身就是黑人,

qq_碎流_0

强制类型转换的前提: 你明确知道这个类就是你要的那个类型,只不过被父类替代了.而如果你没有明确这个类是子类,你还要去强制类型转换,这个是不行的.

qq_碎流_0

强制类型转换的前提: 你明确知道这个类就是你要的那个类型,只不过被父类替代了.而如果你没有明确这个类是子类,你还要去强制类型转换,这个是不行的.

scala_somnus_gxy

你的运行异常都是因为你直接用子类去创建父类的一个引用,按正常逻辑想想都不对啊,就像生孩子似的,父亲可以生出好几个孩子,你能倒过来说孩子生出好几个父亲?????
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java