在代码中
创造了一个父类father的实例f
并为f的number属性赋值。
创造一个子类child的实例c
获得f的number属性
继承father类的show方法时本该显示c的number属性的地方显示了father类属性的初始值。
但若直接重写方法,C的number无异常。
想请教这个代码中的super.show()是否是我用错了
以下为主代码
import java.util.Scanner;
public class text {
public static void main(String[] args) {
father f=new father();
Scanner input=new Scanner(System.in);
System.out.println("输入number:");
int num=input.nextInt();
f.setNumber(num);
child c=new child(f);
c.showChild();
f.show();
}
}
以下为father类代码
public class father {
private int number = 30;
public void setNumber(int input) {
this.number = input;
}
public int getNumber(father a) {
return a.number; }
public void show() {
System.out.println("这是father对象的number:" + number);
}
}
以下为child类代码
public class child extends father {
private int number;
public child() {
}
public child(father f) {
System.out.println(f.getNumber(f));
this.number = f.getNumber(f);
}
public void setNumber(int input) { this.number=input; } public int
getNumber(child c) { return c.number; }
public void showChild() {
super.show();
System.out.println("这是child对象的number:" + number);
}
}
以下为运行结果:
输入number:
11
11
这是father对象的number:30 //30为father类的初始值
这是child对象的number:11
这是father对象的number:11
以下为预想中的运行结果
输入number:
11
11
这是father对象的number:11
这是child对象的number:11
这是father对象的number:11
super.show() 本质上就是当前类的方法,因为当前类继承了父类的方法,但是方法输出的变量是当前类的成员变量。
成员变量是私有的,父类的私有成员变量不能被子类访问到的。
子类继承了父类的方法,等价于show()就是子类自己的方法,在自己的方法中打印的当然是自己的成员变量了。
写的太乱,不是很清楚你要干什么,你看看我整合的代码。
/**
类名要大写,养成习惯
*/
public class Father {
private int fatherNumber = 30;
public int getFatherNumber() {
return fatherNumber;
}
public void setFatherNumber(int fatherNumber) {
this.fatherNumber = fatherNumber;
}
public void show() {
System.out.println("这是father对象的number:" + fatherNumber);
}
}
public class Child extends Father {
private int childNumber = 5;
public Child() {
}
public int getChildNumber() {
return childNumber;
}
public void setChildNumber(int childNumber) {
this.childNumber = childNumber;
}
public void showChild() {
// 这里要使用super的方法,子类必须继承Father
super.show();
System.out.println("这是child对象的number:" + childNumber);
}
}
public class Test {
public static void main(String[] args) {
Father f=new Father();
Scanner input=new Scanner(System.in);
System.out.println("输入number:");
int num=input.nextInt();
f.setFatherNumber(num);
Child c=new Child();
c.showChild();
f.show();
}
}
把Father类中number前的private修饰符去掉就行了,父类的私有成员是不能被继承的。
这个程序总共有三个对象
对象1:father new出来的因为有设置过它的值,所以它是11
对象2:child,同上
对象3:father,该对象为chiled继承,在child调用showChild();方法时打印值,改值因为没有被修改过所以值未变。