关于 子类局部变量 和 父类局部变量 的关系

引用:http://bbs.csdn.net/topics/390764291

这里贴出自己的理解:


问题:

class Fu {
	int i = 2;

	public int getI() {
		return i;
	}
}

class Zi extends Fu {
	int i = 4;

}

public class Jicheng {

	public static void main(String[] args) {
		System.out.println(new Zi().getI());
	}

}

这个输出结果怎么会是2呢,

子类不是应该 也继承了父类的getI()方法么,

怎么get到的是父类的值??


我的理解:

1,子类继承父类,会继承父类的所有属性(properties)和方法(methods),

包括private修饰的属性和方法,但是子类只能访问和使用非private的,

所以可以这么理解: 子类对象的内部 包涵了一个完整父类对象;

2.  new Zi()就是创建一个子类对象,而子类对象内部包涵了父类对象,

所以又要先new Fu(), 也就是说
 创建子类对象 = 创建父类对象 + 其他

//	Zi() {
//		super(); 这是JVM默认加上去的
//	}

3.子类对象没有重写(Overriding)父类的方法,那么这个方法就还"包涵"在父类对象里,

子类对象用getI()方法,其实质调用的是 子类对象"肚子里的"那个父类对象的方法.

4 return i; JAVA规定,变量前面没有特别说明是谁的变量,那么就适用"就近原则",

显然父类对象的属性int i是最近的,下面这个例子可以更好的理解就近原则;


public class Test {
	static int age = 1;
	public static void main(String[] args) {
		
		System.out.println(age);//输出1     此处没有指明这个age是谁的,适用就近原则,JVM认为age是成员变量static int age;
		
		int age = 2;
		System.out.println(age);//输出2	此处没有指明这个age是谁的,适用就近原则,JVM认为age是  局部变量int age;
		
		System.out.println(Test.age);//输出1 此处指明了是类Test的age,JVM就不能再用就近原则了.
	}
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值