A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈山 中级黑马   /  2012-11-22 16:17  /  1643 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈山 于 2012-11-23 22:32 编辑

class A {
        private void fun(){
               
        }
}

class B extends A{
        public void fun(){
               
        }
}
问题:A类中的fun()是否重写了父类中的fun()?
注意:父类中fun()访问权限为private。

评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 金鑫 于 2012-11-22 16:22 编辑

private关键字所修饰的成员被封装之后,只在本来中被访问,目的是不希望被外界所访问。如果能被子类继承后访问的话,就打破了封装性了,所以是不能被直接访问的。
如果想访问父类中私有的成员变量,就在父类中定义一个方法,在方法中将父类中北封装的对象返回,让外界访问
public int getInt()
{
     return x;
}
public String  getString()
{
     return y;
}

当父类中的成员函数用private来修饰时,子类无法重写。如果子类中有一个方法与父类方法名相同,参数列表以及返回值都相同,依然不是重写,只是在子类中重新定义了一个方法,可以加static关键字。
比如你的例子中,在子类也定义了一个方法public void fun(){},他与父类无关,只是在子类中定义了一个与父类一样的方法而已,但是不是重写,更不是从父类继承过来的


评分

参与人数 1技术分 +1 收起 理由
杨千里 + 1

查看全部评分

回复 使用道具 举报
不是,private 是不能被重写的,这是两个不同的方法,当你A a = new B()时,调用fun方法都不能调的,因为是private,除非在类内部调用
回复 使用道具 举报
1.首先要明白什么是重写,重写就是派生类(子类)继承基类(父类)的方法,所以我觉得你提的问题稍微有一点问题,应该是B类中的fun()是否重写了父类中的fun()
2.其次要知道如何实现重写,我总结了一下,应该是这样的
  (1)、必须是在继承里,

  (2)、方法名、返回值类型、参数个数和参数类型 都必须相同

  (3)、派生类(子类)重写的方法的访问权限不能低于基类(父类)的权限

所以得出结论,应该是B类中的fun()重写了父类中的fun()

这只是我个人而言,希望我的解释能使你有一个小小的满足

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马