返回
继承中的作用域: 理清子父类间的变量访问规则
后端
2023-11-15 02:04:56
在面向对象编程中,继承是一种重要的特性,它允许派生类从基类继承属性和方法。不过,继承也涉及到一个微妙的概念——作用域。
作用域指的是变量或函数的可访问性范围。在继承中,基类和派生类拥有各自独立的作用域,这意味着它们可以拥有同名的成员(变量或函数),而不会相互干扰。
同名成员的屏蔽
当子类和父类拥有同名的成员时,子类成员将屏蔽 父类同名成员。换句话说,当子类访问同名成员时,它只会访问自己类中定义的成员,而不会访问父类中的同名成员。
示例:
class Parent {
public int age = 50;
}
class Child extends Parent {
public int age = 20;
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
System.out.println(child.age); // 输出:20
}
}
在上面的示例中,Child
类继承了 Parent
类的 age
变量。然而,当我们创建 Child
对象并访问它的 age
变量时,输出的是子类中定义的 age
值(20),而不是父类中定义的 age
值(50)。
基类成员的访问
尽管子类成员会屏蔽同名的父类成员,但派生类仍然可以通过 super
访问父类的成员。super
关键字可以显式地引用父类,允许派生类访问父类的变量和方法。
示例:
class Parent {
public int age = 50;
}
class Child extends Parent {
public int age = 20;
public void printAge() {
System.out.println("子类年龄:" + age);
System.out.println("父类年龄:" + super.age);
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.printAge();
// 输出:
// 子类年龄:20
// 父类年龄:50
}
}
在上面的示例中,Child
类通过 super
关键字访问了父类的 age
变量,并打印出了父类和子类的 age
值。
结论
继承中的作用域涉及基类和派生类成员的可访问性。子类成员屏蔽同名的父类成员,但派生类可以通过 super
关键字访问父类的成员。理解继承中的作用域对于编写健壮和可维护的代码非常重要。