当前位置: 首页 > 知识库问答 >
问题:

试图弄清楚继承和多态性

樊熠彤
2023-03-14

我正在做一个关于继承和多态性的练习,我有3个独立的分支,我的主类,一个超级动物类和一个子猫类。我已经在Animal和Cat类中制作了重载构造函数,getters和setters以及toString()方法。我想我有继承部分。现在我需要创建2个动物对象引用,两者都是Cat的实例,例如:一个是名为Tobbie的Siamese类型。

有人能给我一个这些对象引用的例子吗?您可以看到我在那里的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个答案

西门品
2023-03-14

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

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}
弓智明
2023-03-14
 // 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;
 }

一些评论:

  • 将名称命名为暹罗语是不合适的;变量名应为“camelCase”(以小写字母开头)。编译器会接受您所写的内容,但这是一种不好的做法
  • 您的<code>Cat(字符串类型,字符串名称)
  • 我想我会让Animal<code>抽象

编辑:像这样:

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

但是,我不认为这样做是一个好的做法,也许你想做的事情最好实现。

编辑:

猫toString():

 public String toString() {
     return super.toString() + " Cat{type=" + type + "}";
 }
 类似资料:
  • 我只是在尝试学习如何将基于intellij构建的java应用程序打包并安装到PC上。 我使用“C:\ProgramFiles(x86)\OpenJava\openjdk-15.0.2\U windows-x64\U bin\jdk-15.0.2”在intellij中构建了hello world,并在开发环境中运行。 如果我理解Launch4j,我可以在JRE选项卡中指定捆绑的JRE,这样我就不依赖

  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self):

  • 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印: class Animal(object): def run(self):

  • 问题内容: 试图获得公司名单,但这给了我一个错误。 例外: 我的文件包含: 当我要添加新的工作订单时,select中应该有可用的公司列表。 更新: 这是我的方法 : 问题答案: JSP包含操作返回的选择标记。添加订单时,它应该具有绑定到bean属性的属性。它应该是值堆栈中的一个对象。 在大多数情况下,最好在操作类中初始化该属性,以更好地实现必须编写方法和初始化列表的位置。 因为标签的属性不能为引发

  • 在面向对象编程中,当我们已经创建了一个类,而又想再创建一个与之相似的类,比如添加几个方法,或者修改原来的方法,这时我们不必从头开始,可以从原来的类派生出一个新的类,我们把原来的类称为父类或基类,而派生出的类称为子类,子类继承了父类的所有数据和方法。 让我们看一个简单的例子,首先我们定义一个 Animal 类: class Animal(object): def __init__(self,

  • 问题内容: 假设我有两个班级:动物和狗。狗是动物的子类。我执行以下代码: 现在,我可以通过a变量来调用Dog类的方法。 但是我的问题是:如果我可以通过Dog对象(继承性)调用Animal的所有方法,那么为什么要使用多态原理呢?我可以声明: 通过此声明,可以使用所有Animal方法和Dog方法。那么为什么要使用多态呢?非常感谢您的回答。 问题答案: 在Java中,多态和继承的概念被“焊接在一起”。通