日期:2014-05-20  浏览次数:20642 次

继承构造函数为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
}
}
}

------解决方案--------------------
私有的属性,子类不能够继承。