package com.itheima;
public class Test01 {
public static void main(String[] args) {
Zi zi = new Zi(3);
System.out.println(zi.getNum());
}
}
class Fu{
private int num;
int age;
public Fu(int num){
this.num = num;
age = 60;
}
public int getNum(){
return num;
}
}
class Zi extends Fu{
private int num = 6;
public Zi(int num){
super(num);
}
}
打印的结果为3。记得子类不能继承父类的private类型的属性和方法,为什么打印的结果不是6呢?作者: 肖明凯 时间: 2013-3-5 21:46
作者: HM王琦 时间: 2013-3-5 21:59
package com.itheima;
public class Test01 {
public static void main(String[] args) {
Zi zi = new Zi(3);//此处的3传递给Zi类构造函数中的num;
//Zi zi=new Zi(3);相当于把3赋值给了Zi类的成员变量num;原来初始值是6;
System.out.println(zi.getNum());//所以打印的是3;
}
}
class Fu{
private int num;
int age;
public Fu(int num){
this.num = num;
age = 60;
}
public int getNum(){
return num;
}
}
class Zi extends Fu{
private int num = 6;//这里num是成员变量初始值为6;
public Zi(int num){
super(num);//调用父类的构造方法this.num=num;
}
} 作者: 谢洋 时间: 2013-3-5 22:24 本帖最后由 谢洋 于 2013-3-5 22:26 编辑
new Zi(3);其实在堆内存中会产生两个对象:子类对象和父类对象,而父类对象又属于子类对象的一部分,为什么?
先看一下子类初始化的过程就明白为什么?
1、调用子类构造时,子类的构造先去调用父类的构造(这时就产生了一个父类对象),等返回后再执行自身的构造,这时子类对象也生产了,但这个父类对象不是独立的,他属于子类的一部分;
2、实际,子父类并不发生实质的复盖,只是在调用子类成员时,产生了跟复盖一样的效果已而,
正如上面的,不管num被什么饰,堆内存中都会有两个num;作者: amen0205 时间: 2013-3-5 22:27