我正在练习多态性和继承性,我创建了一个类(Animals)来设置动物的名称,然后我创建了一个子类(Cat)来设置其发出的声音,最喜欢的玩具。我曾尝试在单独的课程(测试)中对其进行测试,以打印出“猫喜欢Moew,它最喜欢的玩具是Yarn”,但除非在测试课程中扩展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之类的变量都不起作用。在不将任何内容扩展到测试类的情况下我该怎么做
答案 0 :(得分:3)
不要将名称变量设为静态。这意味着它属于该类,而不属于Animal
对象,这意味着该类中永远只有一个Animal.name
。您的Cat.sound
,Cat.favoriteToy
变量也是静态的,这意味着所有的猫都会具有相同的声音和相同的喜欢的玩具(我想这是可以接受的,但是不要在构造函数中分配它)。>
设置者不需要有返回值(您只需更改一些变量)。例如:
public void setName(String newName) {
this.name = newName;
}
字母不需要任何参数。您已经知道要返回什么,不需要参数。例如:
public String getSound() {
return this.sound;
}
此外,您的Animals
应该是Animal
,因为此类代表一只动物。
如果您创建一个Cat
对象,那么该对象也将自动为Animal
(继承),因此无需像在主方法中一样创建两者。
Cat myCat = new Cat("Purr","meow","ball"); //create cat
System.out.println(myCat.getName());
变量是静态的,所以所有的猫现在都拥有这个名字,声音和最喜欢的玩具...
答案 1 :(得分:0)
也许您尝试做类似的事情
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());
}
}