Java继承和重写方法
我只是在学习遗传,我被困在一个简单的问题上。我想在one类中用它的子类two中的新语句覆盖print()语句。我不确定我将如何处理它,因为它是一个没有参数的void语句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() {
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();
}
}