使用类和类的继承 要求:创建一个名为 Animal 的类,包含一个构造函数和一个 speak 方法。然后创建一个继承自 Animal 的 Dog 类,并重写 speak 方法来输出“Woof”。实例化一个 Dog 对象并调用 speak 方法
时间: 2024-10-26 11:03:11 浏览: 70
在面向对象编程中,类是一种蓝图,用于描述具有相似特性和行为的对象集合。首先,我们创建一个基础类 `Animal`,它有一个构造函数和一个 `speak` 方法:
```javascript
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return 'Animal makes a sound';
}
}
```
接着,我们创建一个名为 `Dog` 的子类,它继承自 `Animal`,并且覆盖了 `speak` 方法:
```javascript
class Dog extends Animal {
speak() {
return 'Woof!';
}
}
```
现在我们可以实例化一个 `Dog` 对象并调用其 `speak` 方法:
```javascript
const myDog = new Dog('Rex');
console.log(myDog.speak()); // 输出 "Woof!"
```
在这个例子中,`myDog` 是一个 `Dog` 类的实例,尽管它的父类 `Animal` 提供了一个默认的 `speak` 实现,但我们通过子类重写了它,使其特定于 `Dog`。
相关问题
作业 3:使用类和类的继承 要求:创建一个名为 Animal 的类,包含一个构造函数和一个 speak 方法。然后创建一个继承自 Animal 的 Dog 类,并重写 speak 方法来输出“Woof”。实例化一个 Dog 对象并调用 speak 方法。
在Java中,你可以按照以下步骤完成这个作业:
首先,创建一个名为`Animal`的类,它通常用于表示动物的一般特性,比如有一个构造函数来初始化对象,以及一个`speak`方法表示通用的叫声,这个方法默认返回一个空字符串。
```java
public class Animal {
// 构造函数
public Animal() {}
// 默认的speak方法
public String speak() {
return "";
}
}
```
接着,为了实现类的继承,我们创建一个名为`Dog`的类,它从`Animal`类继承而来,并覆盖`speak`方法以输出特定的声音" Woof "。
```java
public class Dog extends Animal {
@Override
public String speak() {
return "Woof";
}
}
```
现在,我们可以创建一个`Dog`对象并调用它的`speak`方法:
```java
public static void main(String[] args) {
// 实例化Dog对象
Dog myDog = new Dog();
// 调用speak方法,输出"Woof"
System.out.println(myDog.speak());
}
```
在这个例子中,`myDog`是一个`Dog`类型的对象,虽然它是通过`Animal`类创建的,但由于`speak`方法已经被重写了,所以当调用`myDog.speak()`时,会执行`Dog`类的`speak`方法,而不是`Animal`类的默认行为。
编写一个Animal类,并定义一些成员变量和成员方法,然后再编写一个 继承 Animal的子类,要求子类对父类中的成员方法进行重写。在测试类中使用 所能义的类,说明其效果。
好的,首先我们来创建一个简单的 `Animal` 类作为基础,它包含一些基本的成员变量和方法:
```java
// Animal.java
public class Animal {
private String name;
private int age;
// 构造函数
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// 父类方法
public void speak() {
System.out.println("This animal makes a generic sound.");
}
// 获取方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
接着,我们创建一个名为 `Dog` 的子类,该子类从 `Animal` 继承并重写了 `speak()` 方法:
```java
// Dog.java
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void speak() {
System.out.println("The dog barks.");
}
}
```
现在,在测试类 `TestClass` 中,我们可以创建一个 `Animal` 对象以及一个 `Dog` 对象,演示多态性:
```java
// TestClass.java
public class TestClass {
public static void main(String[] args) {
Animal myAnimal = new Animal("Generic", 5);
Animal myDog = new Dog("Buddy", 3);
// 使用父类引用,但实际操作的是子类实例
myAnimal.speak(); // 输出 "This animal makes a generic sound."
myDog.speak(); // 输出 "The dog barks."
System.out.println("Name of the animal: " + myAnimal.getName());
System.out.println("Age of the animal: " + myAnimal.getAge());
// 虽然myDog是Dog类型,但通过Animal引用访问,显示的是Dog重写的属性和方法
System.out.println("Name of the dog: " + myDog.getName()); // 输出 "Buddy"
System.out.println("Age of the dog: " + myDog.getAge()); // 输出 "3"
}
}
```
运行这个测试类,你会看到父类方法被子类的具体实现所替换,这就是多态性的体现。
阅读全文
相关推荐

















