继承构造函数为private的父类时,一旦为内隐类就不出错了,弄不清楚原因。
如下代码,由于Point类的构造方法为私有,所以ColoredPoint无法编译通过。
class Point {
private Point() { }
}
class ColoredPoint extends Point {
int color;
}
但是,一但将这两个类放到一个外部类中却编译通过了。代码为:
class test{
class Point {
private Point() { }
}
class ColoredPoint extends Point {
int color;
}
}
到底怎么回事呢?
------解决方案--------------------外人拿拿你东西算偷,兄弟姐妹之间互相拿点儿东西不算偷吧。
------解决方案--------------------楼上已经回答得很清楚了,但是怕你不太理解,我再罗嗦下.
去看下 private public friendly(默认的) protect(受保护的) 的作用域范围你就清楚了.
------解决方案--------------------把构造函数定义为Private好像是Singleton模式的做法,为了不让其他的类可以直接去new Object.而是提供了一个public方法getInstance()。
而我觉得内部类虽然也叫做类,但不能用类的标准去定义它。我觉得它有时候更像是一个大的attribute.
------解决方案--------------------不好意思,犯了个错误,protected 弄成 protect ,罪过啊!
是不是内部类中,能够访问Outer Class范围内的任意方法和成员。我知道内部类能够访问外部类的方法和成员,不知道它还能访问其他内部类的方法和成员。我这样理解对吗?
------------------------------
基本没错,但如果是外部类的静态变量那又另说了.
只能说象你说的这种情况是对的.
------解决方案--------------------flyforlove(吾将远去) 经典,顶
内隐类 你就把他想成方法
方法 访问 private 修饰的是可以的,所以 ,我就不说了
------解决方案--------------------不好意思,你后面的例子在编译期就已经通不过了
class test2{
class Point {
private int n;
}
class OuterColoredPoint extends Point {
public void t(){
n=2; //error ,cannot access superclass 's private member
super.n=3;//OK,but how to explain?--这里也是提示can 't access
}
}
}
------解决方案--------------------私有的属性,子类不能够继承。