Java继承和重写方法

Java继承和重写方法,java,Java,我只是在学习遗传,我被困在一个简单的问题上。我想在one类中用它的子类two中的新语句覆盖print()语句。我不确定我将如何处理它,因为它是一个没有参数的void语句 public class One { private String name; private int age; public human(String n, int a) name = n; age = a; } public void print() {

我只是在学习遗传,我被困在一个简单的问题上。我想在one类中用它的子类two中的新语句覆盖print()语句。我不确定我将如何处理它,因为它是一个没有参数的void语句

  public class One {

    private String name;
    private int age;

    public human(String n, int a)
      name = n;
      age = a;
    }
    public void print() {

     System.out.println("Name: " + name);
     System.out.println("Age: " + age);

    }
二等舱:

    public class Two extends One {

    private double gpa;

    public two(String n, int a, double g) {
      super(n,a);
      gpa = g;

    public double getGPA (){
          return gpa;
       }

    public void print() {
    // override code here to include code from class one + displaying GPA..

     }
}
例如,example.print()会打印

Name: Jack
Age: 34
我想要的输出是

Name: Jack
Age: 34
GPA: 3.20

我想我必须使用超级方法,但找不到一种方法来正确地结合它。任何提示都将不胜感激

你的想法是对的。试试这个:

public void print() {
    super.print();
    System.out.println("GPA: " + this.gpa);
}

关键字
super
允许您访问超类的(可见)成员。因此,您可以调用超类的
print()
方法,然后只需执行子类的特定工作:

public void print() {
    super.print();
    System.out.println ("GPA: " + gpa);
}
有关
super
用法的更多信息,请参阅Java教程的这一简短部分:。它确实用一个简单的例子解决了与您所问的问题完全相同的问题

请注意,如果您

public void print() {
    print();
    System.out.println ("GPA: " + gpa);
}
如果不指定要调用
super.print()
,则
two
print()
方法将无限期地调用自身,直到得到
OutOfMemoryError


还值得注意的是Vash在中提到的注释。

调用方法的super()同样简单

public class one {

private String name;
private int age;

public human(String n, int a);
name = n;
age = a;

public void print() {

System.out.println ("Name: " + name);
System.out.println ("Age: " + age);
Second class:

public class two extends one {

private double gpa;

public two(String n, int a, double g) {
super(n,a);
gpa = g;

public double getGPA (){
      return gpa;
   }

public void print() {
 super.print();
 System.out.println("GPA: " + getGPA());
}

当您重写类2中的print()方法时,您可以在
as
System.out.println(“GPA:+GPA”)

在Java中,每个方法都是虚拟的,这意味着您可以覆盖每个可访问的方法。通过可访问方法,我们可以采用修改器为public、protected或default的方法

在Java1.6中,建议使用标记已被重写的方法。这有助于编译器和开发人员防止潜在的错误

所以要重写方法
One#print()
,只需在子类中添加具有相同属性的方法

重写时调用super不是强制性的

要记住的一件好事是,向方法添加说明为什么需要重写,并使该方法调用超类逻辑

Your One.java

public class One {

protected String name;
protected int age;

public One(String n, int a)
{
name = n;
age = a;
}
public void print() {
System.out.println ("Name: " + name);
System.out.println ("Age: " + age);
}
}
2.java

public class Two extends One{
private double gpa;

public Two(String n, int a, double g) {
super(n,a);
gpa = g;
}
public double getGPA (){
      return gpa;
   }

public void print() {
    System.out.println ("Name: " + name);
    System.out.println ("Age: " + age);
    System.out.println ("gpa: " + gpa);
}
}
将其添加到某个java文件中以检查输出

public class ExecuteTwo {
public static void main(String[] args) {
    Two two = new Two("Aiuna",1,100.0);
    two.print();
}
}
这会给你你想要的

看到此内容后,您应该做什么: (i) 知道什么是构造函数吗
(ii)访问修饰符,访问级别

对不起,我不理解上面代码后面添加的注释或无用的注释。对不起,我的错误,输入了一个导致编译器错误的错误,我认为我没有完全解释它。谢谢…
example.print()什么是
示例的引用/对象类型
?Anuj Balan:-收集有关
super
的信息
Head first Core java
是学习核心java的最佳书籍。尽快读。不要错过它。你可以为OP做这件事。:-)忽略我的评论,如果你知道的话。
public class ExecuteTwo {
public static void main(String[] args) {
    Two two = new Two("Aiuna",1,100.0);
    two.print();
}
}