代码不能正常工作,除非我扩展类

我练习多态性和继承,我创建了一个类(Animals)来设置动物的名字,然后我创建了一个子类(Cat)来设置它发出的声音,最喜欢的玩具......所有这些。我尝试在单独的课程(测试)中对其进行测试以打印出“猫喜欢 Moew,它最喜欢的玩具是纱线”,但除非我在测试课程中扩展 Cat,否则它不起作用。


这是我的代码。


Animals.java


public class Animals {


protected static String name;


public Animals() {


}


public Animals(String name) {

    this.name = name;

}


public String setName(String newName) {

    return this.name = newName;

}


public String getName() {

    return name = name;

}


public static void animMove() {

    System.out.println(name + " likes to walk");

}


}

Cat.java


public class Cat extends Animals {


public static String sound;

public static String favToy;


public String getSound(String sound) {

    return this.sound = sound;

}


public String getToy(String favToy) {

    return this.favToy = favToy;

}


public Cat() {


}


public Cat(String name, String sound, String favToy) {

    super(name);

    this.sound = sound;

    this.favToy = favToy;

}


}

test.java


public class test{


public static void main(String[] args) {

    Animals anim = new Animals();


    Cat cat = new Cat("Cat", "moew", "Yarn ball");

    System.out.println(anim.getName() + " Likes to " + cat.getSound(sound) 

    + ", its favourite toy is a " + cat.getToy(favToy));



}


}

如果我将 Cat 扩展到测试类,一切正常,但是当我不这样做时,声音和 favToy 之类的变量都不起作用。如果不将任何内容扩展到测试类,我将如何做到这一点


慕侠2389804
浏览 118回答 2
2回答

泛舟湖上清波郎朗

不要将名称变量设为静态。这意味着它属于类而不是Animal对象,这意味着类中永远只有一个Animal.name。你的Cat.sound,Cat.favoriteToy变量也是静态的,这意味着所有的猫都会有相同的声音和最喜欢的玩具(我想这是可以接受的,但不要在构造函数中分配它)。Setter 不需要有返回值(你只是在改变一些变量)。例如:public void setName(String newName) {   this.name = newName;}Getter 不需要任何参数。您已经知道要返回什么,不需要参数。例如:public String getSound() {   return this.sound;}另外,你Animals应该是Animal,因为这个类代表一个单一的动物。如果您创建一个Cat对象,它也会自动创建Animal(继承它),因此无需像在 main 方法中那样创建两者Cat myCat = new Cat("Purr","meow","ball"); //create catSystem.out.println(myCat.getName());变量是静态的,所以现在所有的猫都会有这个名字、声音和最喜欢的玩具......

呼啦一阵风

也许你试图做类似的事情1)public class Animal {    protected String name;    public String animMove() {        return new String(this.name + " likes to walk");    }}2)public class Cat extends Animal {    public String sound;    public String favToy;    public Cat(String name, String sound, String favToy) {        super(name);        this.sound = sound;        this.favToy = favToy;    }    public String getName() {        return super.name;    }    public String getSound() {        return this.sound;    }    public String getToy() {        return this.favToy;    }}3)public class test{    public static void main(String[] args) {        Animal anim = new Cat("Cat", "moew", "Yarn ball");        System.out.println(anim.getName() + " Likes to " + anim.getSound(sound) + ", its favourite toy is a " + anim.getToy(favToy) + " " + anim.animMove());    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java