拥有2个相同的班级是什么意思?

时间:2016-04-20 22:28:01

标签: java

 public boolean isAfraidOf(Animal animal) {
    //Compare the class of this animal to Bird
    if (animal.getClass() == Bird.class) {
        return false;
    } else {
        return true;
    }

Animal是超类,Bird是子类,我需要知道他们比较两个类的区别?并提前致谢

2 个答案:

答案 0 :(得分:0)

getClass()返回Class。因此animal.getClass()将返回Animal类型,并且比较将返回false

所以这是一个全面的研究,供您理解:

Animal animal = new Animal();

Bird bird = new Bird();

Animal birdAnimal = new Bird();

if (animal.getClass() == bird.getClass()){
    System.out.println("Bird equals to animal");
}else{
    System.out.println("Bird not equals to animal");
}

if (birdAnimal.getClass() == animal.getClass()){
    System.out.println("BirdAnimal equals to animal");
}else {
    System.out.println("BirdAnimal not equals to animal");
}

if (animal.getClass() == Animal.class){
    System.out.println("animal equals to Animal");
}else{
    System.out.println("animal not equals to Animal");
}

if (animal.getClass() == Bird.class){
    System.out.println("animal equals to Bird");
}else{
    System.out.println("animal not equals to Bird");
}

这是输出:

Bird not equals to animal
BirdAnimal not equals to animal
animal equals to Animal
animal not equals to Bird

答案 1 :(得分:0)

如果我正确理解您的问题,您需要确定Animal是否属于类型Bird。最简单的方法是使用instanceof示例:

if (animal instanceof Bird) {
    return false;
} else {
    return true;
}

有另一种方法可以做这种事情。在Java中,默认情况下所有类都扩展Object。这意味着它们带有内置的.equals()方法。但是,如果您创建了Animal和Bird类,则.equals()方法很可能不够。创建新类时,应覆盖.equals()方法,以完全按照您希望的方式比较对象。例如,如果所有动物都有体重,您可能想要比较它。或不。也许您只想根据另一个属性确定相等性。