JIENANYA 2021-11-07 09:57 采纳率: 66.7%
浏览 1276
已结题

报错:构造函数不能应用于给定类型

我在类中,重载抽象类的构造函数时,
写成这样

    public Cat(String name, String sex, double weight){
        this.name = name;
        this.sex = sex;
        this.weight = weight;
    }

就报出“constructor Pet in class Pet cannot be applied to given types;”
(Pet类中的构造函数Pet不能应用于给定的类型; )
然后在CSDN上查到了解法,就是在对象的构造函数中第一句写上super(参数…);
然后就行了!不过我不明白,构造函数是“不能被继承,不能被覆盖(重写),但是可以被重载的”(这是我收藏的java课里面的原话)。
下面是我的整个代码(begin到end里的是我写的,问题主要出在构造函数上)。

package case1;

import java.util.Scanner;

public class Task1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String dogName = sc.next();
        String dogSex = sc.next();
        String dogColor = sc.next();

        String catName = sc.next();
        String catSex = sc.next();
        double catWeight = sc.nextDouble();
        // 通过有参构造函数实例化Dog类对象dog
        // dog调用talk()方法
        // dog调用eat()方法
        /********* begin *********/
        Dog dog = new Dog(dogName, dogSex, dogColor);
        dog.talk();
        dog.eat();
        /********* end *********/
        // 通过有参构造函数实例化Cat类对象cat
        // cat调用talk()方法
        // cat调用eat()方法
        /********* begin *********/
        Cat cat = new Cat(catName, catSex, catWeight);
        cat.talk();
        cat.eat();
        /********* end *********/
    }
}

// 抽象类Pet 封装属性name和sex
// 构造函数初始化name和sex
// 声明抽象方法talk()
// 声明抽象方法eat()
abstract class Pet {
    /********* begin *********/
    String name;
    String sex;
    public Pet(String name, String sex){
        this.name = name;
        this.sex = sex;
    }
    public abstract void talk();
    public abstract void eat();
    /********* end *********/
}

// Dog类继承自Pet类 封装属性color
// 构造函数初始化name、sex和color
// 实现自己的talk()方法和eat()方法
// talk()输出'名称:name,性别:sex,颜色:color,汪汪叫'
// eat()输出'name吃骨头'
class Dog extends Pet {
    /********* begin *********/
    String color;
    public Dog(String name, String sex, String color){
        super(name,sex);
        this.color = color;
    }
    public void talk(){
        System.out.println("名称:"+name+",性别:"
        +sex+",颜色:"+color+",汪汪叫");
    }
    public void eat(){
        System.out.println(name+"吃骨头!");
    }
    /********* end *********/
}

// Cat类继承自Pet类 封装属性weight
// 构造函数初始化name、sex和weight
// 实现自己的talk()方法和eat()方法
// talk()输出'名称:name,性别:sex,体重:weight kg,喵喵叫'
// eat()输出'name吃鱼'
class Cat extends Pet {
    /********* begin *********/
    double weight;
    public Cat(String name, String sex, double weight){
        super(name,sex);
        this.weight = weight;
    }
    public void talk(){
        System.out.println("名称:"+name+",性别:"
        +sex+",体重:"+weight+"kg,喵喵叫");
    }
    public void eat(){
        System.out.println(name+"吃鱼!");
    }
    /********* end *********/
}
  • 写回答

1条回答 默认 最新

  • JIENANYA 2021-11-07 10:21
    关注

    我已经解决好了。有更容易理解的欢迎解答,谢谢啦~

    img


    img


    img


    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料