微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

Java内部类问题

时间:2014-04-10 09:52  浏览:努力统计中...
《Java编程思想》中的一道题 在第一个包中创建一个至少有一个方法的接口。然后在第二个包内创建一个类,在其中增加一个protected的内部类以实现那个接口。在第三个包中,继承这个类
《Java编程思想》中的一道题
  在第一个包中创建一个至少有一个方法的接口。然后在第二个包内创建一个类,在其中增加一个protected的内部类以实现那个接口。在第三个包中,继承这个类,并在一个方法中返回该protected内部类的对象,在返回的时候向上转型为第一个包中的接口的类型。
我的代码如下:
package packages.p1;

public interface SomeInterface{
    void park();
}
----------------------------------------
package packages.p2;
import packages.p1.*;

public class SomeClass{
    protected class SomeInnerClass implements SomeInterface{
public void park(){System.out.println("I'm parking.");}
    }
}
---------------------------------------
package packages.p3;
import packages.p2.*;
import packages.p1.*;

public class SubClass extends SomeClass{
    public SomeInterface mine(){return new SomeInnerClass();}

    public static void main(String[] args){
SubClass sc = new SubClass();
SomeInterface si = sc.mine();
si.park();
    }
}
不知道为什么子类不可以访问父类的内部类?


这是错误信息,顺便问一下,Java内部类到底有什么用?能不能一言以蔽之,真心看了觉得陷进去了

public class SomeClass{
    protected class SomeInnerClass implements SomeInterface{
              public SomeInnerClass (){}
public void park(){System.out.println("I'm parking.");}
    }
}


增加一个构造方法?这个默认构造方法不是自动认会添加的么

有没有人帮忙解决一下啊  为什么子类无法访问父类的protected内部类,是不是访问方法有误?要用父类.this 这样来新建??

public class SomeClass{
    protected class SomeInnerClass implements SomeInterface{
              public SomeInnerClass (){}
public void park(){System.out.println("I'm parking.");}
    }
}
默认是这样的
public class SomeClass{
    protected class SomeInnerClass implements SomeInterface{
              SomeInnerClass (){}
public void park(){System.out.println("I'm parking.");}
    }
}


这是什么原理?不是说protected的域可以被子类访问的么??


按照你的说法,编译确实通过了,也可以正确运行,能不能告诉我为什么?还是那个问题,既然子类可以访问父类的protected域,为什么还要写一个public的构造方法??

谁懂啊。。。


按照你的说法,编译确实通过了,也可以正确运行,能不能告诉我为什么?还是那个问题,既然子类可以访问父类的protected域,为什么还要写一个public的构造方法??
你可以访问这个类,但是这个类里面的属性和方法也有自己的权限

内部类也是一个单独的类。

创建内部类对象格式错误。
请试试:
new SomeClass().new SomInnerClass();

package packages.p3;
import packages.p2.*;
import packages.p1.*;

public class SubClass extends SomeClass{
    public SomeInterface mine(){return new SomeClass().new SomeInnerClass();}

    public static void main(String[] args){
SubClass sc = new SubClass();
SomeInterface si = sc.mine();
si.park();
    }
}


把子类改一下即可:
package packages.p3;
import packages.p2.*;
import packages.p1.*;

public class SubClass extends SomeClass{
    public SomeInterface mine(){return
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------