黑马程序员技术交流社区
标题:
一个重写的小疑问
[打印本页]
作者:
陈山
时间:
2012-11-22 16:17
标题:
一个重写的小疑问
本帖最后由 陈山 于 2012-11-23 22:32 编辑
class A {
private void fun(){
}
}
class B extends A{
public void fun(){
}
}
问题:A类中的fun()是否重写了父类中的fun()?
注意:父类中fun()访问权限为private。
作者:
金鑫
时间:
2012-11-22 16:20
本帖最后由 金鑫 于 2012-11-22 16:22 编辑
private关键字所修饰的成员被封装之后,只在本来中被访问,目的是不希望被外界所访问。如果能被子类继承后访问的话,就打破了封装性了,所以是不能被直接访问的。
如果想访问父类中私有的成员变量,就在父类中定义一个方法,在方法中将父类中北封装的对象返回,让外界访问
public int getInt()
{
return x;
}
public String getString()
{
return y;
}
当父类中的成员函数用private来修饰时,子类无法重写。如果子类中有一个方法与父类方法名相同,参数列表以及返回值都相同,依然不是重写,只是在子类中重新定义了一个方法,可以加static关键字。
比如你的例子中,在子类也定义了一个方法public void fun(){},他与父类无关,只是在子类中定义了一个与父类一样的方法而已,但是不是重写,更不是从父类继承过来的
作者:
卞潇洋
时间:
2012-11-22 16:25
不是,private 是不能被重写的,这是两个不同的方法,当你A a = new B()时,调用fun方法都不能调的,因为是private,除非在类内部调用
作者:
韩俊杰
时间:
2012-11-22 17:29
1.首先要明白什么是重写,重写就是派生类(子类)继承基类(父类)的方法,所以我觉得你提的问题稍微有一点问题,应该是B类中的fun()是否重写了父类中的fun()
2.其次要知道如何实现重写,我总结了一下,应该是这样的
(1)、必须是在继承里,
(2)、方法名、返回值类型、参数个数和参数类型 都必须相同
(3)、派生类(子类)重写的方法的访问权限不能低于基类(父类)的权限
所以得出结论,应该是B类中的fun()重写了父类中的fun()
这只是我个人而言,希望我的解释能使你有一个小小的满足
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2