继承的注意事项与继承中成员变量的关系

继承中的注意事项

 

私有的成员不能被继承: 父类中有一些私有成员,不能在子类中直接使用。只不过在子类中,不能直接访问父类中定义的私有成员变量

父类中的构造方法不能继承

  原因:父类的构造方法需要和父类的类名一致、子类的构造方法需要和子类类名一致,父 类和子类的类名不一样。因此无法继承,名称              有冲突。

             父类的构造方法用于给父类的成员变量赋值,子类的构造方法用于给子类的成员变 量赋值,子类的成员变量较多,使用父类的构                造方法无法将子类中所有的成员 变量都进行赋值,因此不继承父类的构造方法。

  解决:子类不继承父类的构造,但是可以【调用】父类的构造方法。(有待学习)

继承的设计:不要为了部分功能而定义继承(有待学习)

继承中成员变量的关系

 

  • 在子父类中定义了不同名称的成员变量,在子类中,既可以访问子类的成员变量,也可以访问父类的成员变量。
  • 在子父类中定义了同名的成员变量,在子类中,根据就近原则来访问
  •   在子类的方法中,如果访问了某个变量名称,优先在当前方法中,寻找该变量的定义,如果找到了就使用方法中的局部变量;如果没有找到,就到子类的成员位置寻找该变量的定义,如果找到了就使用子类的成员变量;如果没有找到,就到父类的成员位置寻找该变量的定义....一直往上找,一直到Object类中,如果还没有找到,就编译报错。

 下面代码示例:

public class 继承中成员变量的关系 {
	public static void main(String[] args) {
		Z z = new Z();
		z.show1();
	}
}
class F{
	int f1 = 3;
	int f2;
}
class Z extends F{
	int f1 = 10;
	int z1;
	int z2;
	public void show1() {
		int f1 = 4;
		System.out.println("f1="+f1);
	}
}

猜一猜输出结果会是什么。

。。。

。。。

。。。

。。。

。。。

。。。

。。。

。。。

。。。

。。。

结果:

f1=4

我们发现,这个4就是这个方法里定义的f1=4;(用eclipse的小伙伴可以鼠标放在最后输出语句上的那个f1,然后按Ctrl键可以点击变量,然后他的原始定义的位置可以高亮)

(就像这样)


然后我们把这个注释掉看看。

public class 继承中成员变量的关系 {
	public static void main(String[] args) {
		Z z = new Z();
		z.show1();
	}
}
class F{
	int f1 = 3;
	int f2;
}
class Z extends F{
	int f1 = 10;
	int z1;
	int z2;
	public void show1() {
		//int f1 = 4;//这里注释掉了
		System.out.println("f1="+f1);
	}
}

输出结果:

f1=10

我们可以发现,方法里面的没有了,然后就会调用子类中我们定义的值为10的f1.


我们把子类中的f1也注释掉试试看:

public class 继承中成员变量的关系 {
	public static void main(String[] args) {
		Z z = new Z();
		z.show1();
	}
}
class F{
	int f1 = 3;
	int f2;
}
class Z extends F{
	//int f1 = 10;//这里也注释掉了
	int z1;
	int z2;
	public void show1() {
		//int f1 = 4;//这里注释掉了
		System.out.println("f1="+f1);
	}
}

输出结果:

f1=3

我们发现这里又调用了父类中等于3的f1。那么这里也就验证了上面所说的,就近原则。当父类,子类,方法中有着同名的变量时。谁离的最近就用谁。先查看方法,如果找不到再去子类中去寻找,如果再找不到就去父类中去寻找。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值