为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-06-15 16:33:31
我练习多态性和继承,我创建了一个类(Animals)来设置动物的名字,然后我创建了一个子类(Cat)来设置它发出的声音,最喜欢的玩具......所有这些。我尝试在单独的课程(测试)中对其进行测试以打印出“猫喜欢 Moew,它最喜欢的玩具是纱线”,但除非我在测试课程中扩展 Cat,否则它不起作用。这是我的代码。Animals.javapublic 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.javapublic 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.javapublic 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 之类的变量都不起作用。如果不将任何内容扩展到测试类,我将如何做到这一点
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

不要将名称变量设为静态。这意味着它属于类而不是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 cat

System.out.println(myCat.getName());

变量是静态的,所以现在所有的猫都会有这个名字、声音和最喜欢的玩具......


查看完整回答
反对 回复 2022-06-15
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

也许你试图做类似的事情


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


    }


}


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信