在百度上查,有的说子类继承到了父类的私有变量,只是不能访问直接访问,只能通过get/set方法区访问。第二种说法是父类的私有属性子类不能继承,父类的私有属性是父类私有的。请问各位前辈,到底哪种说法是正确的?(刚注册的号,发帖格式什么之类的问题不懂,包涵,谢过...)

解决方案 »

  1.   

    定义为private 只能本类去访问包括他的内部类。子类不能继承父类的私有成员,如果子类想取得父类私有成员的值可以通过get/set封住好的方法获取。 所有第二种正确
      

  2.   

    protected的可以被子类继承,
    private的不行,只能在本类中使用
      

  3.   

    private只能在本类中使用。
    protected可以由子类使用或者是同一包下其他类使用。有时候一种常见的做法是将实例域的访问权限设为private,但是将与该实例域相关的get/set方法设为public,用这样的方式保证实例域不会被直接读写。还有一种情况是将get方法设为public,set方法设为private,那么对其他类来说,这个实例域就是只读的了。
      

  4.   

    第一种说法严谨,并且正确
    第二种说法明显是错误的,这个说法的意思就是,子类对象创建后,父类里的私有成员变量就不存在了子类继承了父类的属性,这一点是肯定的,只是子类不能直接访问罢了(注意是“直接”访问,所以我说第一种说法严谨)
    当创建子类对象时,子类构造函数会默认调用一个父类的构造函数,父类的各个属性会被初始化子类可以通过父类提供的 getter/setter 访问父类属性,否则无法修改或得到父类的私有属性值
    如果父类提供了方法去间接修改或读取父类的私有属性,这其实也算是在访问,比如一个计数器:
    class Counter {
        private int value = 0;
        public void print(){
            // 打印私有成员变量
            System.out.println("value = " + value);
        }
        public void add(){
            // 修改私有成员变量
            value++;
        }
    }class MyCounter extends Counter {
        public void f(){
            super.add(); // 间接访问父类的私有成员变量
        }
    }另外,子类还可以通过反射直接访问父类的属性,这就不多说了
      

  5.   

    private的不能被子类继承
      

  6.   

    大家都是根据自己的经验来或主观判断来回答的,正确答案是不能继承。其实这在Java语言规范(JLS)中已清晰的说明了,:
    Members of a class that are declared private are not inherited by subclasses of that class. Only members of a class that are declared protected or public are inherited by subclasses declared in a package other than the one in which the class is declared.(https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2)我觉得问题所在有2点,1是大家对Java"继承(inherit)"的理解不够准确,能通过反射等方法访问到,不等同于就是继承了。
    2是区别C++,C++中子类继承父类,子类对象包含了整个父类对象。
      

  7.   

    private是私有的,继承不了的。 
      

  8.   

    能够继承,只是不能直接访问。
    你可以自己建个父类,然后有个私有属性,让一个子类继承它。然后再在main方法里面建立子类的对象,并且使用那个属性。只是你不能直接用.(点)属性来直接用,而必须使用方法来间接调用。
    相当于你继承下来以后,那个属性也是私有的。
      

  9.   

    A:子类只能继承父类所有非私有的成员(成员方法和成员变量);
    B:子类不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法;
      

  10.   

    看Oracle的官方文档
    http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.htmlA subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.说的很明白,子类不能继承父类的私有成员,但可以通过父类的public或protected方法访问。