强制Java高级演员
可以在java中强制使用上转换类型吗?看看这个例子
public class Animal{}
public class Dog extends Animal{}
Dog dog = new Dog();
Animal test = dog;
我所拥有的:(test instanceof Dog)
和(test instanceof Animal)
返回true
我想要的是:(test instanceof Dog)
==false和(test instanceof Animal)
==true
有没有一种方法可以迫使测试只做动物 或者唯一的方法是为经过狗的动物创建一个构造器?我试图避免创建构造函数,因为我有一个复杂的对象,有很多getter/setter
谢谢
# 1 楼答案
我不知道你为什么会关心一个对象是
Animal
而不是Dog
,毕竟Dog
是Animal
。任何可以应用于Dog
的东西都应该适用于Animal
,否则就存在设计问题但是如果必须确定这一点,那么调用^{} (由
Object
定义)来获取Class
对象,然后将其与Animal.class
进行比较# 2 楼答案
无法更改实例的类型。你可以像使用动物一样使用和实例
此外,很多二传手和接球手不应该是太大的问题,也不应该需要狗的输入。只要有一个直接复制Animal中所有字段的构造函数(你可以用同一类的其他对象直接访问字段),它就可以接受dog作为参数
# 3 楼答案
当你“延伸”时,你说狗是一种动物。我看到你的行为是正确的
如果你有——
猫是一种动物
孩子是人
猫不是人
孩子不是动物