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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨翔 中级黑马   /  2013-1-6 22:26  /  2092 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨翔 于 2013-1-15 22:25 编辑

我有个疑问,父类的方法如果设置成 private 的话,子类是能继承的吧,但是new出来的对象没有办法调用这个方法,是这个样子么

评分

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

查看全部评分

6 个回复

倒序浏览
不能继承,private修饰的为父类所私有的,不可以通过子类new出来的对象来访问父类的私有方法
子类可以父类覆盖父类的私有方法,但是访问权限应该大于父类的访问权限

评分

参与人数 1黑马币 +30 收起 理由
冯海霞 + 30

查看全部评分

回复 使用道具 举报
父类私有的private 方法是不能被子类所继承的,但是子类的方法可以"重写"父类私有的方法(重新实现的方法,不叫重写也不叫重载,是一个该子类新增的方法,和子类的一般扩展方法一样);如果该方法是父类的构造方法,其实可以试着用单利模式去实现在类被加载后创建一个单一的实例
class single
{
   private single(){}
   private static final single s = new single();
   public static single getSingle()
  {
     return s;
  }
}

评分

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

查看全部评分

回复 使用道具 举报
不能继承父类中被private修饰的方法,
在java中修饰方法有四个关键字,private,protected,default(不写为默认),public。
修饰符
本类
同一包下
子类
任何地方
private
Yes
default
Yes
Yes
protected
Yes
Yes
Yes
public
Yes
Yes
Yes
Yes

对于class的权限修饰只可以用public和default.
public类可以在任意地方被访问。
default类只可以在同一个包下的类访问。

评分

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

查看全部评分

回复 使用道具 举报
感谢各位的指点,感谢版主加分{:soso_e100:}
回复 使用道具 举报
不可以,父类中的private函数对外隐藏,而且也不能当做重写来做,因为子类并没有接收到父类中这个privte函数,只能算是重新定义了一个与父类同名函数
class Father{
        void show()
        {
                System.out.println("Father");
        }
        private void speak()
        {
                System.out.println("Fatherclass");
        }
}

class Child extends Father{
        void show()
        {
                System.out.println("Child");
        }
        void speak()
        {
                System.out.println("Childclass");
        }
}

class TestDemo{
        public static void main(String args[])
        {
                new Father().show();
                new Child().show();
                new Child().speak();
        }
}
其实最简单的理解就是,既然private了,子类肯定看不到,所以何来继承可言,子类只能自己重新定义方法了

评分

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

查看全部评分

回复 使用道具 举报
李然 中级黑马 2013-12-14 20:27:00
7#
就简单一句话,private的做用范围只局限在本类中,就算继承也不会继承被private修饰的参数或者方法。
记住这个就足够了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马