我只是在学习遗传,而且我遇到了一个简单的问题.我想覆盖一个类中的print()语句,并在其子类2中使用新语句.我不确定如何处理它,因为它是一个没有参数的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);
}
Run Code Online (Sandbox Code Playgroud)
二等:
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..
}
}
Run Code Online (Sandbox Code Playgroud)
例如,example.print()将打印出来
Name: Jack
Age: 34
Run Code Online (Sandbox Code Playgroud)
我想要的输出是
Name: Jack
Age: 34
GPA: 3.20
Run Code Online (Sandbox Code Playgroud)
我想我必须使用超级方法,但无法找到正确合并它的方法.任何提示将不胜感激!
你有正确的想法.试试这个:
public void print() {
super.print();
System.out.println("GPA: " + this.gpa);
}
Run Code Online (Sandbox Code Playgroud)
通过该关键字super,您可以访问超类的(可见)成员.所以,你可以调用print()超类的方法,然后只做子类的具体工作:
public void print() {
super.print();
System.out.println ("GPA: " + gpa);
}
Run Code Online (Sandbox Code Playgroud)
有关使用的更多信息,请参阅Java教程的这一简要部分super:使用关键字super.它确实用一个简单的例子解决了你所问的同样问题.
请注意,如果你写的
public void print() {
print();
System.out.println ("GPA: " + gpa);
}
Run Code Online (Sandbox Code Playgroud)
如果没有指定你想要调用super.print(),那么print()方法two将无限期地调用自己,直到你得到一个OutOfMemoryError.
值得注意的是Vash @Override在答案中提到的注释.
在Java中,每个方法都是虚拟的,这意味着您可以覆盖每个可访问的方法.通过可访问的方法,我们可以采用具有修饰符public,protected或default的方法.
从Java 1.6开始,建议使用注释@Override来标记已被覆盖的方法.这有助于编译器和开发人员防止潜在的故障.
因此要覆盖方法,One#print()您只需要在子类中添加具有相同签名的方法.
@Override
public void print() {
super.print(); //Here you call the functionality from super class.
System.out.println("GPA: %f", getGPA());
}
Run Code Online (Sandbox Code Playgroud)
覆盖时,调用super不是强制性的.
要记住的好处是向方法添加描述为什么需要覆盖,并且方法调用超类逻辑.
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |