黑马程序员技术交流社区
标题:
private 类型的方法和属性都不能被子类所继承 ???
[打印本页]
作者:
沙漠里的小鱼
时间:
2013-2-14 20:37
标题:
private 类型的方法和属性都不能被子类所继承 ???
那为什么还要这样定义阿
作者:
黄玉昆
时间:
2013-2-14 21:19
为了使得程序的封装性更好啊,成员私有了,你就不能直接访问了,只能通过访问器和修改器(即get和set)获取和设置数据了,因此你就可以控制别人对数据的修改和获取了啊。如果别人直接修改数据,那么数据很容易被破坏了,很容易传入非法值,从而破坏程序的健壮性。比如,你要求一个成员必须是大于零的,如果小于零就会对程序有伤害,但是你要是不设为私有的话,那么别人就可以随意修改,这不就破坏数据了嘛!
作者:
沙漠里的小鱼
时间:
2013-2-14 22:31
黄玉昆 发表于 2013-2-14 21:19
为了使得程序的封装性更好啊,成员私有了,你就不能直接访问了,只能通过访问器和修改器(即get和set)获取 ...
其实私有的东西是可以继承下来的 只是你访问不到
作者:
huangxiaoyue
时间:
2013-2-15 01:36
1、父类属性被私有化后,子类继承所有的的属型,子类不能直接访问父类的属性,只能借助于父类中的公有方法对父类中的私有属性进行访问。
2、父类中的方法是不能被子类继承的,因为方法是被存储在另一个被称为方法区中,他是无法被继承的。方法不属于对象的,它属于类的。他只能被覆写。
作者:
dzr19850306
时间:
2013-2-15 05:11
因为不想被继承,有些东西是你独有的。就像儿子只能继承父亲的金钱,不能继承父亲的全部。
作者:
刘勇强
时间:
2013-2-15 10:03
楼上的答案好 {:soso_e113:}
作者:
冯佩
时间:
2013-2-15 10:41
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方法,说明此时发生了覆盖,覆盖是因为继承到了父类的非私有方法。由此得结论:私有的东西是不可以继承下来的,因此才访问不到。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2