3.定义一个抽象类AbsAnimal,要求如下 (1)包括属性name,weight,color; (2)定义其有参构造方法; (3)定义受保护的run方法,功能是打印输出"Animal run fastly"; (4)在main方法里实例化抽象对象a AbsAnimal a = new AbsAnimal(….) ,想一想为什么会报错?如果报错注释掉该语句。
时间: 2024-02-23 16:58:41 浏览: 76
好的,我来回答你的问题。
首先,根据你的要求,可以定义一个如下的抽象类 AbsAnimal:
```java
public abstract class AbsAnimal {
protected String name;
protected double weight;
protected String color;
public AbsAnimal(String name, double weight, String color) {
this.name = name;
this.weight = weight;
this.color = color;
}
protected void run() {
System.out.println("Animal run fastly");
}
}
```
这个抽象类满足了你的要求,包括属性 name、weight、color,有参构造方法和受保护的 run 方法。
但是,你在 main 方法里实例化抽象对象 a AbsAnimal a = new AbsAnimal(….) 是会报错的。因为抽象类是不能被实例化的,只能被子类继承并实现其抽象方法。如果要使用 AbsAnimal 类,只能通过定义它的子类来实现。比如,我们可以定义一个 Dog 类来继承 AbsAnimal 类:
```java
public class Dog extends AbsAnimal {
public Dog(String name, double weight, String color) {
super(name, weight, color);
}
@Override
public void run() {
System.out.println("Dog run fastly");
}
}
```
这个 Dog 类继承了 AbsAnimal 类,并重写了它的 run 方法。现在,我们就可以使用 Dog 类来创建对象了。比如,我们可以在 main 方法里这样写:
```java
public static void main(String[] args) {
AbsAnimal a = new Dog("Tommy", 10.5, "Brown");
a.run();
}
```
这里,我们先通过 Dog 类的构造方法创建了一个 Dog 对象,并将它赋值给 AbsAnimal 类型的变量 a。然后,我们调用 a 的 run 方法,这里会执行 Dog 类中的 run 方法,输出 "Dog run fastly"。这样就实现了我们想要的功能。
阅读全文