在这个问题上我必须使用instanof吗?还是我应该如何编码?

问题描述 投票:1回答:2

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

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
2个回答
0
投票

动物的腿数应该包含在Animal的子类中,而不是像现在那样从外部设置。类似于:

public abstract class Animal {
  protected int numLegs;

  public int getNumLegs() {
    return numLegs;
  }
}

public class Dog extends Animal {
  public Dog() {
    numLegs = 4;
  }
}

祝你好运!


0
投票

您应该将公共功能放入父类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,只需调用legsAnimal方法,实现类将输出正确的值。

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());
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.