为什么我不能将我的超类对象分配给基类
class Alpha {
String getType() {
return "alpha";
}
}
class Beta extends Alpha {
String getType() {
return "beta";
}
}
public class Gamma extends Beta {
String getType() {
return "gamma";
}
public static void main(String[] args) {
Gamma g1 = new Alpha();
Gamma g2 = new Beta();
System.out.println(g1.getType() + " "
+ g2.getType());
}
}
任何人都可以告诉我为什么不可能这样做。
答案 0 :(得分:2)
您正在尝试将子类分配给父类。这与你应该做的完全相反。
想象一下你上课了:
public class Mammal {
}
public class Dog extends Mammal {
}
public class Cat extends Mammal {
}
您认为分配是否符合逻辑:
Cat cat = new Mammal();
任何Mammal
是Cat
吗?
答案 1 :(得分:1)
没有。对子类的引用必须引用自身的实例或其子类之一(或null)。因为它的行为不正确。
以下计划有何意义?
Object o = new Object();
String s = (string) o;
int i = s.length();
答案 2 :(得分:0)
您可以添加强制转换以编译代码:
package com.stackoverflow.main;
class Alpha {
String getType() {
return "alpha";
}
}
class Beta extends Alpha {
String getType() {
return "beta";
}
}
public class Gamma extends Beta {
String getType() {
return "gamma";
}
public static void main(String[] args) {
Gamma g1 = (Gamma) new Alpha();
Gamma g2 = (Gamma) new Beta();
System.out.println(g1.getType() + " " + g2.getType());
}
}
但它会在运行时给你异常
Exception in thread "main" java.lang.ClassCastException: com.stackoverflow.main.Alpha cannot be cast to com.stackoverflow.main.Gamma
at com.stackoverflow.main.Gamma.main(Gamma.java:21)
因为在java中你不能将基类型的实例转换为子类型