概述
- 所谓隐藏是指子类拥有两个相同名字的变量,一个继承自父类,另一个由自己定义
- 在编写子类时,仍然可以声明成员变量,如果所声明的成员变量的名字和继承来的成员变量的名字相同(类型可以不同),子类就会隐藏所继承的成员变量
隐藏
如果在子类中对从父类继承来的成员变量进行重新定义,就出现了子类变量对父类变量的隐藏。
当**子类执行自己定义的方法**时,操作的成员变量是自己定义的变量(无法操作子类隐藏的成员变量),而把继承自父类的变量隐藏起来。
class Father{
String s = "父类";
}
class Son extends Father{
String s = "子类";//!!!!!
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
System.out.println(son.s);//output:子类
}
}
output:
子类
当**子类执行从父类继承的方法**时,操作的成员变量是继承自父类的成员变量(被子类继承和隐藏的成员变量)
class Father{
String s = "父类";
void print(){
System.out.println("父类的print");
}
}
class Son extends Father{
String s = "子类";
void print(){
System.out.println("子类的print");
}
void printDemo(){
print();
super.print();//!!!!!!
}
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
son.printDemo();
}
}
output:
子类的print
父类的print
操作 隐藏变量
如果非要操作隐藏的成员变量,需要用到关键字super
class Father{
String s = "父类";
}
class Son extends Father{
String s = "子类";
void print(){
System.out.println("不使用super关键字:"+s);
System.out.println("使用super关键字:"+super.s);//!!!!!
}
}
class TestDemo{
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}
output:
不使用super关键字:子类
使用super关键字:父类