有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

强制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

谢谢


共 (3) 个答案

  1. # 1 楼答案

    我不知道你为什么会关心一个对象是Animal而不是Dog,毕竟DogAnimal。任何可以应用于Dog的东西都应该适用于Animal,否则就存在设计问题

    但是如果必须确定这一点,那么调用^{}(由Object定义)来获取Class对象,然后将其与Animal.class进行比较

    if (Animal.class == test.getClass())
    
  2. # 2 楼答案

    无法更改实例的类型。你可以像使用动物一样使用和实例

    此外,很多二传手和接球手不应该是太大的问题,也不应该需要狗的输入。只要有一个直接复制Animal中所有字段的构造函数(你可以用同一类的其他对象直接访问字段),它就可以接受dog作为参数

    public class Animal{
        private int[] data;
        public Animal(Animal a){
            data=a.data;
            ...
        }
    }
    
  3. # 3 楼答案

    当你“延伸”时,你说狗是一种动物。我看到你的行为是正确的

    如果你有——

    class Animal {}
    class Human {}
    
    class Cat extends Animal{}
    class Child extends Human {}
    

    猫是一种动物

    孩子是人

    猫不是人

    孩子不是动物