public class Test
{
public static void main(String[] args) {
Zi z = new Zi();
z.function();
z.method();
}
}
class Fu
{
private void method()
{
System.out.println("method");
}
/*
void method()
{
System.out.println("method");
}
*/
void function()
{
method();
}
}
class Zi extends Fu
{
void method()
{
System.out.println("extends method");
}
}
私有化是一种权限封装方式,被私有化的成员只在本类中有效,即便是本类的对象也不能直接访问到,而要通过本类对外提拱的非私有方法间接访问。子类只能继承父类的非私有方法,子类要访问父类的私有化成员也只能通过继承到的父类非私有方法来进行间接访问。子类能不能访问到父类的私有成员暂且不说,到底子类有没有继承到父类的私有成员呢?是不是真的如楼主所说继承到了私有成员但访问不到呢?我们分析一下:
在同一个类中,不同修饰符的同名同参方法是不能共存的,因为编译器视其为同一个方法。这也就是说,如果子类继承了父类中的私有方法,再在子类中写同名方法时,必然发生覆盖。上述代码中,父类的method方法若为私有的,z.function()的运行结果打印的为"method";这说明并未发生覆盖,原因是子类并未继承到父类的私有方法。而将Fu类的方法的private去掉后,z.function()的运行结果则打印的为"extends method",这时function()调用的就是Zi类中的method方法,说明此时发生了覆盖,覆盖是因为继承到了父类的非私有方法。由此得结论:私有的东西是不可以继承下来的,因此才访问不到。 |