【问题标题】:How to create a subclass? [closed]如何创建子类? [关闭]
【发布时间】:2014-01-27 03:18:39
【问题描述】:

我是编码的初学者,我一直在寻找整个互联网,并没有真正出来,并给我一个关于如何使用扩展方法以及如何正确使用 super( ) 方法。我有点坚持这一点,想知道是否有人可以展示或给我一个很好的例子。我的项目是定义一个类 Diploma 及其子类 DiplomaWithHonors,以便一些陈述显示他们的学术成就。谢谢你的帮助!好吧,既然我对这个问题进行了“刺伤”,那么如果有人可以帮助解决这个问题,我的 return 语句就会出错......

     public class Diploma
      {
       public String fullName;
       public String course;
       int output = Diploma();

        public Diploma(String name, String info)
         {
         fullName = name;
         course = info;
         }
        public String toString()
         {
          return "This certifies that \n" + fullName + " \n has completed a course in " + course;
           }
        }

         public class DiplomaWithHonors extends Diploma
      {
        public DiplomaWithHonors( String name, String info ) 
      {
        super( name, info );
      }
       public String toString() 
      {
      return "This certifies that \n" + fullName + " \n has completed a course in " +   course+ "\n*** with honors ***";
      }
        }
      public String toString()
       {
        Diploma[] diplomas = new Diploma[2];
        diplomas[ 0 ] = new Diploma("Murray Smith", "Gardening");
        diplomas[ 1 ] = new DiplomaWithHonors("Lisa Smith", "Evolutionary Psychology");

        for( int i = 0; i< diplomas.length; i++) 
        {
         System.out.println( diplomas[ i ] );
        }
       }
        return output;
       }

P.S 很抱歉样式故障,我有点搞砸了复制粘贴。

【问题讨论】:

  • 如果编码适合您,也许您应该尝试编写一些代码。尝试解决问题,然后在遇到实际问题时再回来。
  • class B extends A { ... }。如果要调用父构造函数,super() 必须是子构造函数中的第一条语句。如果父级具有参数化构造函数,您可以在super(param1, param2, ...);statement 中传递这些参数。如果要调用父级的特定方法,请使用super.methodOfParentToInvoke(...),其中methodOfParentToInvoke(...) 是您要调用的父级方法
  • 感谢@Radiodef 和 Roman 提供的示例,他们让我们更好地理解超类和子类。 Nathaniel 如果我有任何想法,我会的,但如果出现问题,我会确保发布它。

标签: java class subclass superclass super


【解决方案1】:

super 不是方法; it's a keyword. 在某些情况下,它可能被称为使用作为方法,但它实际上是一个关键字。上面的链接将为您提供大量有用的信息,以及一些关于继承的花絮。

除此之外,这听起来像是两个实体之间的直接关系:

  • Diploma 应该是您正在使用的基本实体;它包含诸如收件人姓名、他们的 GPA 以及他们正在接受的学位科目等信息。

  • DiplomaWithHonors 听起来对于不同的 GPA 来说是一种不同的荣誉。

非常原始结构可能看起来像这样。假设定义了字段。

public class Diploma {
    public Diploma(String name, double GPA, String degreeField, DiplomaType diplomaType) {
        this.name = name;
        this.GPA = GPA;
        this.degreeField = degreeField;
        this.diplomaType = diplomaType;
    }
}

public class DiplomaWithHonors extends Diploma {
    public DiplomaWithHonors(String name, double GPA, String degreeField, DiplomaType diplomaType) {
        super(name, GPA, degreeField, diplomaType);
        calculateHonors();
     }
}

请注意,构造函数上下文中的super 必须是该构造函数内部引用的第一个事物。

【讨论】:

  • 谢谢@Makoto,我从来没有想过会这样,你现在让这一切变得更有意义了。
【解决方案2】:

查看此示例的 toString() 方法

import java.util.List;


public class Diploma {
    private String student;

    public String getStudent() {
        return student;
    }

    public void setStudent(String student) {
        this.student = student;
    }

    @Override
    public String toString() {
        return "Diploma [student=" + student + "]";
    }

    public static void main(String[] args){
        DiplomaWithHonors d1 = new DiplomaWithHonors();
        d1.setStudent("John");
        String[] achievements = {"Golden Medal","Silver Medal"};
        d1.setAchievements(achievements);

        System.out.println(d1);

        DiplomaWithoutAnyHonors d2 = new DiplomaWithoutAnyHonors();
        d2.setStudent("Doe");
        String[] homeworksDoneByStackOverflow = {"How to use super"};
        d2.setHomeworksDoneByStackOverflow(homeworksDoneByStackOverflow );

        System.out.println(d2);
    }
}

import java.util.Arrays;



public class DiplomaWithHonors extends Diploma {
    private String[] achievements;

    public String[] getAchievements() {
        return achievements;
    }

    public void setAchievements(String[] achievements) {
        this.achievements = achievements;
    }

    @Override
    public String toString() {
        return "DiplomaWithHonors [achievements=" + Arrays.asList(achievements)
                + ", toString()=" + super.toString() + "]";
    }


}

import java.util.Arrays;



public class DiplomaWithoutAnyHonors extends Diploma{
    private String[] homeworksDoneByStackOverflow;

    public String[] getHomeworksDoneByStackOverflow() {
        return homeworksDoneByStackOverflow;
    }

    public void setHomeworksDoneByStackOverflow(
            String[] homeworksDoneByStackOverflow) {
        this.homeworksDoneByStackOverflow = homeworksDoneByStackOverflow;
    }

    @Override
    public String toString() {
        return "DiplomaWithoutAnyHonors [homeworksDoneByStackOverflow="
                + Arrays.asList(homeworksDoneByStackOverflow) + ", toString()="
                + super.toString() + "]";
    }


}

【讨论】:

  • 感谢 Leo 为我提供了一些不同的方法,我非常感谢您的工作。
  • 这如何演示 super()?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2021-11-04
  • 2013-10-05
相关资源
最近更新 更多