在百度上查,有的说子类继承到了父类的私有变量,只是不能访问直接访问,只能通过get/set方法区访问。第二种说法是父类的私有属性子类不能继承,父类的私有属性是父类私有的。请问各位前辈,到底哪种说法是正确的?(刚注册的号,发帖格式什么之类的问题不懂,包涵,谢过...)
解决方案 »
- 数据库中怎么计算两个日期之间的天数?
- java 把TextField内容通过按钮事件储存到文本文件中
- 程序出错,请各位帮忙看看
- 哪位有<<java核心技术>><<java编程思想>>的电子图书,发给小弟一下,.感激不尽!!
- 问一个<<JAVA核心基础>>中关于类型转换的问题
- 为什么java语言中有static方法?
- 根据IP地址、文件名、文件存放位置能否查找该文件是否存在?
- 关于mina框架限制服务端连接数的问题
- 除了weblgoic,我们能用其它的应用服务器吗?
- 高手请教一个疑惑,回复即有分曾送~~~~~~~~~~~~~~100分啊
- 我是JAVA新手,我安装了JDK1.7系统变量也配置好了,但是为什么我在运行窗口里输入javac却显示'javac'不是内部或外部命令
- java,学生一枚,写一个窗体的时候遇到了添加的组件无法显示的问题,请求大神帮忙,代码如下,非常感谢
private的不行,只能在本类中使用
protected可以由子类使用或者是同一包下其他类使用。有时候一种常见的做法是将实例域的访问权限设为private,但是将与该实例域相关的get/set方法设为public,用这样的方式保证实例域不会被直接读写。还有一种情况是将get方法设为public,set方法设为private,那么对其他类来说,这个实例域就是只读的了。
第二种说法明显是错误的,这个说法的意思就是,子类对象创建后,父类里的私有成员变量就不存在了子类继承了父类的属性,这一点是肯定的,只是子类不能直接访问罢了(注意是“直接”访问,所以我说第一种说法严谨)
当创建子类对象时,子类构造函数会默认调用一个父类的构造函数,父类的各个属性会被初始化子类可以通过父类提供的 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(); // 间接访问父类的私有成员变量
}
}另外,子类还可以通过反射直接访问父类的属性,这就不多说了
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++中子类继承父类,子类对象包含了整个父类对象。
你可以自己建个父类,然后有个私有属性,让一个子类继承它。然后再在main方法里面建立子类的对象,并且使用那个属性。只是你不能直接用.(点)属性来直接用,而必须使用方法来间接调用。
相当于你继承下来以后,那个属性也是私有的。
B:子类不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法;
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方法访问。