gpt4 book ai didi

面向对象的概念

转载 作者:行者123 更新时间:2023-12-03 21:47:26 26 4
gpt4 key购买 nike

美好的一天!

我正在复习 Java OO 概念。并编写了以下代码:

  public class Main {  
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat();
dog.sleep();
}

}

abstract public class Animal {

private int age;
public Animal (){
age = 1;
}
public Animal (int age){ //How can I call this constructor?
this.age = age;
}
public void eat(){
System.out.println("Eat");
}
abstract public void sleep();
}

abstract public class Canine extends Animal{

abstract public void roam();

}

public interface Pet {

public String petName = null; //i want the pets to have a variable petName.
public void trick();
}


public class Dog extends Canine implements Pet{

public void roam(){
System.out.println("roam");
};

public void sleep(){
System.out.println("sleep");
};

public void eat(){
System.out.println("Eat Dog");
};

public void trick(){
System.out.println("trick");
}

}

我有几个问题如下:

  1. 如何调用 Animal Overloaded 构造函数?

  2. 如何在 PET 界面中使用变量 petName?

  3. 我是否正确理解了 OO 的概念?我违反了哪些规则?

提前谢谢你。

最佳答案

  1. 子类将使用 super(...) 作为第一行从它们自己的构造函数中调用 super 构造函数!
  2. 接口(interface)不能有变量或状态 - 只有方法!
  3. 您的概念很好,但您的代码无法编译(由于上述第 2 项)。

一些解决方案:

public interface Pet {
String getName();
void trick();
}

现在 Dog 类(或任何实现 Pet 的类)必须实现 Pet.getName()。为 Dog 类提供一个名为“name”的 String 类型的字段,并从 Dog.getName() 返回它。

public abstract class Canine extends Animal {
public Canine(int age) {
super(age); // pass the age parameter up to Animal
}
...
}

public class Dog extends Canine implements Pet {
private final String name;
public Dog(String name,int age) {
super(age); // call the age constructor
this.name=name;
}
public String getName() { return name; }
... rest of class ...
}

每个子类(尤其是抽象子类)都需要为您要调用的所有 父类构造函数提供匹配的构造函数! (所以我将 age 参数添加到 Canine 构造函数中,以便 Dog 可以将 age 参数传递给它。

关于面向对象的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5576249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com