Java扩展Java类并覆盖其方法

时间:2020-06-19 14:53:10

标签: java class overriding extend

我要创建一个Java控制台应用程序,该应用程序定义一个类,将其扩展为其他两个类,为所有三个类覆盖toString(),将这些类实例化为三个对象,并在这些对象上调用toString(),打印出每个toString()调用的返回值。

应用程序将实例化Course,FlexPathCourse和GuidedPathCourse中的三个对象,并调用它们对应的toString()方法。

我有以下代码。但是对于FlexPathCourse.java和GuidedPathCourse.java,我在“ super(code1,hours,title1)”所在的位置收到一条错误消息“类对象中的构造方法对象无法应用于给定类型”。您能解释一下这意味着什么,我应该做什么吗?预先谢谢你。

Main Class

public class U1A1_InheritOverridetoString {

    public static void main(String[] args) {
        Course c1 = new Course("TBD", 3, "TBD");
        FlexPathCourse c2 = new FlexPathCourse("IT2230", 3, "Introduction to Database Systems");
        GuidedPathCourse c3 = new GuidedPathCourse("ITFP4739", 3, "Mobile Cloud Computing Application Development");

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
    }

}

Course.java

public class Course {
    protected String code;
    protected int creditHours;
    protected String title;

    public Course(String code1, int hours, String title1){
            code = code1;
            creditHours = hours;
            title = title1;
    }

    @Override
    public String toString(){
        return "Java class name = 'Course' " + "Course Code = " + code;
    }
}

FlexPathCourse.java

public class FlexPathCourse {
    private String optionalResources;

    public FlexPathCourse (String code1, int hours, String title1){
        super(code1, hours, title1);
    }
        @Override
        public String toString(){
            return "Java class name = 'FlexPathCourse' " + "Course Code = " + code;
        }

    }

GuidedPathCourse.java

public class GuidedPathCourse {
    private String requiredResources;
    private int duration;

    public GuidedPathCourse(String code1, int hours, String title1){
        super(code1, hours, title1);
    }
    @Override
    public String toString(){
        return "Java class name = 'GuidedPathCourse' " + "Course Code = " + code;
    }
}

4 个答案:

答案 0 :(得分:1)

好像您错过了扩展课程一样,

public class FlexPathCourse extends Course

public class GuidedPathCourse extends Course

答案 1 :(得分:1)

Super引用了它扩展的类。

[SuperClass] -> [class] 就您而言

[Course] -> [FlexPathCourse]
         -> [GuidedPathCourse]

为了告诉有关这种关系(继承)的Java,您需要使用extends,例如:public class FlexPathCourse extends Course { ... }

之后,您可以使用继承属性,例如多态性,这是Java中的重要功能。

此链接中的解释:https://www.w3schools.com/java/java_polymorphism.asp

关于错误

Constructor object in class object cannot be applied to given types

意味着您没有这样声明构造函数,扩展类时将解决此问题,因为现在它可以识别您在Course类中声明的super()构造函数

答案 2 :(得分:1)

如果要扩展一个类,则在声明另一个类时应使用extend

public class GuidedPathCourse extends Course{
      private String requiredResources;
      private int duration;

      public GuidedPathCourse(String code1, int hours, String title1){
           super(code1, hours, title1);
      }
      @Override
      public String toString(){
          return "Java class name = 'GuidedPathCourse' " + "Course Code = " + code;
       }


}

与FlexPathCourse相同

答案 3 :(得分:0)

在您的GuidedPathCourse和FlexPathCourse中

像这样添加extends Course

public class GuidedPathCourse extends Course {