黑马程序员技术交流社区

标题: 关于类的继承方面 [打印本页]

作者: 杨翔    时间: 2013-1-6 22:26
标题: 关于类的继承方面
本帖最后由 杨翔 于 2013-1-15 22:25 编辑

我有个疑问,父类的方法如果设置成 private 的话,子类是能继承的吧,但是new出来的对象没有办法调用这个方法,是这个样子么
作者: 蔡少凯    时间: 2013-1-6 23:38
不能继承,private修饰的为父类所私有的,不可以通过子类new出来的对象来访问父类的私有方法
子类可以父类覆盖父类的私有方法,但是访问权限应该大于父类的访问权限
作者: 周超    时间: 2013-1-7 00:57
父类私有的private 方法是不能被子类所继承的,但是子类的方法可以"重写"父类私有的方法(重新实现的方法,不叫重写也不叫重载,是一个该子类新增的方法,和子类的一般扩展方法一样);如果该方法是父类的构造方法,其实可以试着用单利模式去实现在类被加载后创建一个单一的实例
class single
{
   private single(){}
   private static final single s = new single();
   public static single getSingle()
  {
     return s;
  }
}
作者: 罗利华    时间: 2013-1-7 01:04
不能继承父类中被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类只可以在同一个包下的类访问。
作者: 杨翔    时间: 2013-1-7 22:48
感谢各位的指点,感谢版主加分{:soso_e100:}
作者: 郭嘉    时间: 2013-1-8 01:54
不可以,父类中的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了,子类肯定看不到,所以何来继承可言,子类只能自己重新定义方法了
作者: 李然    时间: 2013-12-14 20:27
就简单一句话,private的做用范围只局限在本类中,就算继承也不会继承被private修饰的参数或者方法。
记住这个就足够了!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2