通过简单地声明其自己的字段版本,子项无法从父类中的方法隐藏字段.您正在反过来应用“数据隐藏”的想法.孩子永远不能隐藏父母的字段,但父母可以隐藏孩子的字段(通过将x声明为私有).如果你想,你可以
use encapsulation to achieve your desired effect,像:
class Parent{
private int x=10;
public int getX() {
return x;
}
void show(){
System.out.println(this.getX());
}
}
class Child extends Parent{
int x=20;
@Override
public int getX() {
return x;
}
public static void main(String[] args){
Child c=new Child();
c.show();
}
}
通过重写getX()访问器方法,子进程可以隐藏来自世界其他地方的父对象x的值.
其他一些值得讨论的观点:
The thing I know is that whenever we are extending a class its parent
class member-function and data-members are available to Child class
这不完全正确.私有方法和数据成员不会(直接)可用于子类.子类只能直接访问公共,受保护和“包级”方法和字段.
Also, I want to know that when we create an object of Child class its
Parent class data-members are put in the Parent section of Child class
object in Heap, but what happens to member-functions?
不是每个实例创建成员函数.如果JVM像那样工作,那将是非常低效的.相反,给定类的方法实现只定义一次,作为永久生成的一部分,其中包含类定义和其他内部JVM状态.给定类的所有实例将共享相同的方法定义.
对于子类,它将共享其父类的方法定义,并且还将为子类中存在的任何方法(以及它覆盖的任何方法)添加自己的定义.