public class Test extends A
{
public static void main(String[] args)
{
System.out.println(new Test().a);
System.out.println(new Test().b);
}
}class A
{
private int a;
}
报错如下:
The field A.a is not visible
b cannot be resolved or is not a field
这是不是可以说明,private 的a被继承了呢?
解决方案 »
- 这条SQL语句在Java下有错吗?为什么运行没结果呢。。。
- 当涉及到很多窗口的时候,怎么控制他们的显示跟隐藏啊?
- 帮忙写一个方法来排序
- Thread中的start()方法实现
- 怎样从键盘输入几个字母,比较它们大小呢?
- 用java杀当前系统线程怎么写?
- 我倒!为什么说位移运算int型只有较低的5个位有用?说什么2的5次方是32,而java的int正是32个位
- java调用本地c方法问题,怎么生成CPP或C文件啊?
- jbuider6入门的问题,运行不起?HelloWorld.java
- 求大神这个怎么写?
- 请教java 替换指定出现位置的字符串
- 如何看懂java class文件中的指定?它是汇编语言吗?
private是访问控制符。
我觉得帖里的例子已经充分证明了,private是可以继承,但不能直接访问的。
LZ 你的代码编译都不能通过吧 System.out.println(new Test().b); 这句怎么回事啊?
就算排除那句 System.out.println(new Test().a);也是不能通过啊
用private修饰过的数据成员或成员方法只能被该类自身访问和修改,而不能被任何其它类(包括该类的子类)访问和引用。
当其它类(包括该类的子类)希望获取或修改private成员时,需要借助该类的方法类实现。
就这么简单
这个问题不应该纠结这么久的。
报错如下:
The field A.a is not visible
b cannot be resolved or is not a field
主题里说明了会报错,我没想过要让他编译通过。
我是希望你们看看两个错误的区别
The field A.a is not visible
b cannot be resolved or is not a field
如果不能被继承,是不是相当于没有这个东西?那么是不是应该报错为【b】,可是报错为【a】,这就说明有a这个东西,只是不可见,not visible
但是,楼主只是为了说明一些错误的观点,他想用个例子证明给大家看,private是可以被继承的。
但是,既然有人提出了这个问题,【这个问题很多年前就有了,直到现在还有人认为private不能被继承】。我就觉得有必要去讨论了。
至少从【访问控制符】的【访问】两个字,就可以看出问题,private是控制【访问】,不是控制【继承】
报错如下:
/////////
The field A.a is not visible
b cannot be resolved or is not a field
这是不是可以说明,private 的a被继承了呢?
////////////////
第一句报错是说字段a是不可见的,就是说在继承体系中子类看不见父类的private变量,也即是说子类不知道父类是否有这个变量,因为它看不见啊,这样它还如何继承呢?你这里让他访问了一个对他隐藏的变量,它当然就报错不可见了;
第二句的错误就是简单的语法错误,并不能对你的理论做什么证明,在类A中根本就没有变量b,
这两句报错信息并不能证明private的a 被继承,
如果按照你的说法,子类不知道父类是否有这个变量,因为它看不见啊。
那么a和b应该是没有区别的。
因为它不知道父类有没有a。
可是现在他已经提示了,a不可见,说明它知道有a这个变量。
class A
{
private int a;
}
a 就只能在Class A中用, 没有经过封装,它的子类是不能调用的
The field A.a is not visible
说的是子类访问不到父类的a成员。
我们换个思维想想,把private改成包访问权限。这时new Test().a就可以访问到。
而且他访问的是子类从父类那继承过来的属性a。而不是父类的属性a。也就是说,new Test().xxx访问的是子类的成员。假如,子类能继承父类的私有属性或其他,
那么子类访问自己的private属性应该是没问题的吧?
但是实际上他访问不了那个从“父类继承来的private属性”,也就是说
子类压根就没有继承父类的private属性他为什么没有继承父类的private属性呢?正如21楼所说,父类的private属性对其子类是
不可见的。他见都见不到,自然也继承不了了。至于为什么eclipse提示The field A.a is not visible
我想那是因为子类因为可见性的问题(visible)没有从父类那继承到a属性
所以它说父类的a属性不可见,子类继承不了,也访问不了