首页 > 解决方案 > 我必须在这个问题中使用 instanof 吗?或者我应该如何编码?

问题描述

我为我的问题写了一个示例代码。我想使用 polimorfism 并尝试通过对象类型更改变量。这段代码有效,但它是最好的方法吗?我应该在两个类中使用通用方法来返回变量吗?谢谢

package example;
import java.util.Scanner;

class Animal{}
class Dog extends Animal{}
class Bird extends Animal{}
public class Example {

    public static void main(String[] args) {
        Animal a;
        int leg=0;
        Scanner k=new Scanner(System.in);
        String s=k.next();
        if(s.equals("dog")) a=new Dog();
        else a=new Bird();

        if(a instanceof Dog) leg+=4;
        else if(a instanceof Bird) leg+=2;
        System.out.println(leg);
    }

}

标签: java

解决方案


您应该将通用功能放入父类Animal,并将特定功能实现到子类BirdDog.

abstract class Animal {
    abstract int legs();
}

class Bird extends Animal {
    @Override
    int legs() {
        return 2;
    }
}

class Dog extends Animal {
    @Override
    int legs() {
        return 4;
    }
}

不需要instanceof,只要调用 的legs方法,Animal实现类就会输出正确的值。

public class Example {

    public static void main(String[] args) {
        Animal animal;
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();

        if(s.equals("dog")) { 
            animal = new Dog();
        } else {
            animal = new Bird();
        }

        System.out.println(animal.legs());
    }

}

推荐阅读