先看一段代码:
class A {
public int x;
}
class B {
public void pri() {
System.out.println(x);
}
}
请问这时候调用x,可以得到值么?
答案是否定的,因为x在A这个类当中,而这个A类和B类毫不相干,B类中没有x这个变量,所有代码会出现编译错误,但是通过继承,就可以访问的到A类里的x。
大家伙儿提到继承,请问最先想到的是什么?
继承皇位?还是继承花呗?(当然是开个玩笑,哈哈)
其实Java里面的继承和我所说的也有异曲同工之妙,也是把“父辈”的东西拿过来用,不过自己有的话,肯定就不能找父亲了,不然面子上挂不住是吧。换句话说也就是c语言里面的就近原则——全局变量和局部变量相同,优先使用局部变量。
那有些人就很倔,就是要在B里面访问A(就比如我们的Java之父,高斯林老爷子),那怎么办呢?
所以就有了我们继承的关键字:<extends
>,中文翻译就是延伸,只要把这个加在B类的后面,那就可以使用x了,如下:
class A {
public int x;
}
class B extends A {
public void pri() {
System.out.println(x);
}
}
这样就可以访问x这个变量了。
那还有个问题,局部变量和全局变量相同怎么办?比如下面这种
class A {
public int x = 10;
}
class B extends A {
public void pri(int x) {
x = x;
System.out.println(x);
}
}
出现这种情况,想都不用想,只要看过我上一篇博客,或者说真正明白了就近原则,就知道这个x输出的是局部变量x,根本不是A类里的x,赋值也是赋在局部变量x这里的,那如果说要访问A类里的x,要引用就<super>
这个关键字了,如下:
class A {
public int x = 10;
}
class B extends A {
public void pri(int x) {
super.x = x;
System.out.println(super.x);
}
}
这样子说明前面的x是父类的x,就不会搞混淆了。
下期介绍super关键字,你们的支持就是我的最大动力。