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

内部类,抽象方法……有点烦。这些为什么错?

class   Outer
{
private   class   Inner
{
}

abstract   class   abs                     //   这抽象类要怎么继承?
{
}

static   class   sta
{
void   print()
{
System.out.println( "static   class   sta ");
}
}

class   valsta
{
static   int   a=0;                   //   为什么内部类不能有静态东西?
}

}

class   Test
{
Outer   a   =new   Outer();
Outer.Inner   b=a.new   Inner();     //   这里不能访问私有的内部类,是   Outer.Inner   错,还是   a.new   错?
Outer.sta.print()   ;                     //内部静态类要怎么使用?
}


------解决方案--------------------
class valsta
{
static int a=0; // 为什么内部类不能有静态东西?
}
答:内部类可以由静态成员,前提是内部类必须也是静态的 所以改成static class valsta

Outer a =new Outer();
Outer.Inner b=a.new Inner(); // 这里不能访问私有的内部类,是 Outer.Inner 错,还是 a.new 错?

答: 因为是私有内部类 只能在其外部类访问内部类 不能在其他类中访问。和把属性或者方法定义为private一样的
------解决方案--------------------
你写的内部类不是静态的,所以必须要依赖外部类的实例,说明白点就是你得先new外部类,才能使用你的内部类,还有就是静态的成员在应用程序启动时总是先事例化,所以静态成员可以调用非静态成员,因为初始化早呀,要不就是楼上说的,内部类也给整成静态的就ok了!!!
------解决方案--------------------
study
------解决方案--------------------
mark
------解决方案--------------------
up
------解决方案--------------------
UP
------解决方案--------------------
直接extends就好啦,不过似乎没有意义的东西。。。。
------解决方案--------------------
关注
------解决方案--------------------
abstract class abs // 这抽象类要怎么继承?
{
}
只能在其他的内部类进行extends直接继承就可以了.外部内不可以.

class Test
{
Outer a =new Outer();
Outer.Inner b=a.new Inner(); // 这里不能访问私有的内部类,是 Outer.Inner 错,还是 a.new 错?
Outer.sta.print() ; //内部静态类要怎么使用?
}
这里你理解错误了...你这么想比较好,内部类只作为内部使用,外部不能调用.虽然有点偏激,但事实上这样去处理可以减少很多麻烦.之所以采用静态类的写法,就是为了保证这个内部类只对外围类起作用,其他的类都不能访问和调用他的参数.如果内部类没有私有说明符就违反了使用内部类的本意.
然后是这个地方的错误和你的疑问.
Outer.Inner是错误的..因为不可见..你的Inner始终是私有的....所以后面的Inner()自然也错了.
a.new Inner(); 难道可以这么写?不能这么书写吧....怎么看都看不出所以然,所以暂时定为错误的写法.既然整句都是错的了..这个错误也就不在意了.

至于内部静态类嘛.....个人理解和上面是一样的,外部不能调用..可能你没理解什么叫静态内部类....我个人的理解就是为内部类加上static的原因是这个内部类的对象不需要引用其他任何对象..;..

然后调用静态类的方法.因为你的内部类是静态的,所以我这么改了一下.
...
static void print()
...
class Test
{
public static void main(String[] args){
Outer.sta.print();
}
}
这样就能调用了.个人建议外围类(Outer)类调用就够了.

内部类自己研究得还不够好,刚看到thinking in java这一部分..所以只能讲一点自己的理解.

这贴好象放了很多天了...又成了废贴.无所谓了.可以复习和学习到很多东西.也不知道我理解的是不是正确的
------解决方案--------------------
class valsta
{
static int a=0; // 为什么内部类不能有静态东西?
}
答:内部类可以由静态成员,前提是内部类必须也是静态的 所以改成static class valsta

===============

为什么?
~~~~~~~~~~
用我的话说就是 static只能访问static!!!不知道这样是不是有点极端了