成员变量的隐藏

一、成员变量的隐藏
首先,我们在编写子类的时候,我们仍然可以声明一些新的成员变量,其中有一种特殊的情况就是,所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏所继承的成员变量。
注:子类继承的方法只能操作子类继承和隐藏的成员变量。(意思就是说子类继承的方法所操作的成员变量一定是被子类继承和隐藏的成员变量。)子类新定义的方法可以操作子类继承和子类新声明的成员变量,但是无法操作子类隐藏的成员变量,如果非要操作隐藏的成员变量,需要用到关键字super,例如super.x、super.play()就是访问和调用被子类隐藏的成员变量x和方法play()。
下面看看测试:先是成员变量的隐藏

/**
 * 父类
 */
package Test;

public class people {
	public String s = "我是父类的s";

}
/**
 * 子类
 */
package Test;

public class student extends people {
	public String s = "我是子类的s";

	public static void main(String[] args) {
		student he = new student();   //创建一个子类的对象
		System.out.println(he.s);

	}

}

可以看到输出的s是子类的成员变量,父类的s则被子类的隐藏了
在这里插入图片描述
直接引用父类的实例变量:

/**
 * 父类
 */
package Test;

public class people {
	public String s = "我是父类的s";

}
/**
 * 子类
 */
package Test;

public class student extends people {
	public String s = "我是子类的s";
	void prints(){
		System.out.println("不用关键字super时:" + s);
		System.out.println( "使用关键字super时:"+ super.s);
	}

	public static void main(String[] args) {
		student he = new student();
           he.prints();
		//System.out.println(he.s);

	}

}

测试结果:
在这里插入图片描述
通过super来调用父类方法:

/**
 * 父类
 */
package Test;

public class people {
	public String s = "我是父类的s";
	void prinfs(){
		System.out.println(s);
	}

}
/**
 * 子类
 */
package Test;

public class student extends people {
	public String s = "我是子类的s";
	void prints(){
		System.out.println(s);
		//System.out.println("不用关键字super时:" + s);
		//System.out.println( "使用关键字super时:"+ super.s);
	}
	void work(){
		prints();
		super.prinfs();
	}

	public static void main(String[] args) {
		student he = new student();
          // he.prints();
		//System.out.println(he.s);
           he.work();

	}

}

测试结果:
在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页