试图找出继承和多态

时间:2014-01-28 16:04:10

标签: java inheritance polymorphism

我正在对继承和多态进行练习,我有3个单独的clasees,我的主类,一个超级Animal类和一个子Cat类。我在Animal和Cat类中都重载了构造函数,getter和setter以及toString()方法。我想我继承了部分。现在我需要制作2个动物对象引用,这两个都是Cat的一个实例,例如:一个是名为Tobbie的Siameese类型。

有人能给我一个这些对象引用的例子吗?你可以看到我在我的Main课程中尝试过,但我不确定这是否正确。

以下是我目前的三个不同的课程。

public class Hw02 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    Animal Siamese = new Cat("Tobbie");
}
}

这是我的动物类。

public class Animal {

private String name;

public Animal() {
    this("na");
}

public Animal(String name) {
    this.name = name;
}

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name the name to set
 */
public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return "Animal{"
            + "name="
            + name
            + '}';
}
}

这是我的猫班。

public class Cat extends Animal {

private String type;

public Cat() {
}

public Cat(String type) {
    this.type = type;
}

public Cat(String type, String name) {
    this.type = type;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

@Override
public String toString() {
    return "Cat{"
            + "type="
            + type
            + '}';
}
}

2 个答案:

答案 0 :(得分:1)

 // in main method
 Animal tobbie = new Cat("siamese", "Tobbie")
 Animal jackie = new Cat("tomcat", "Jackie")

 // in Cat class
 public Cat(String type, String name) {
      super(name)
      this.type = type;
 }

一些评论:

  • 名称Siamese是不恰当的惯例;变量名应为“camelCase”(以小写字母开头)。编译器会接受它,就像你写的那样,但这是一种不好的做法。
  • 您的Cat(String type, String name)构造函数未调用正确的超类构造函数,因此类型丢失;对于Cat(String type)构造函数
  • 也是如此
  • 我想我会制作动物abstract及其构造函数protected。我认为让客户直接实例化动物而不指明它们是什么类型的动物是一种不好的做法。

编辑: 像这样:

 Animal animal = new Animal("What am I?")

但是,我认为这样做并不是一个好习惯,否则你可能会做得更好。

编辑:

Cat toString():

 public String toString() {
     return super.toString() + " Cat{type=" + type + "}";
 }

答案 1 :(得分:0)

使用上面的代码,这是一个例子:

Animal animal0 = new Cat("Siamese", "Bob");
Animal animal1 = new Cat("Tomcat", "Frank");
Animal animal2 = new Cat("Tomcat", "George");
Animal animal3 = new Animal("Elephant");

System.out.print(animal0.toString());
System.out.print(animal1.toString());
System.out.print(animal2.toString());
System.out.print(animal3.toString());

会产生输出:

Cat{type=Siamese}
Cat{type=Tomcat}
Cat{type=Tomcat}
Animal{name=Elephant}