黑马程序员技术交流社区
标题:
内部类与继承的小疑问
[打印本页]
作者:
张凯
时间:
2012-7-23 23:41
标题:
内部类与继承的小疑问
本帖最后由 张凯 于 2012-7-24 14:48 编辑
有一个编程题:在第一个包中创建一个接口;再第二个包中创建一个类,并包含一个protected的内部类实现那个接口;在第三个包中继承这个类,并在一个方法中返回该pretected内部类的对象,并返回的时候向上转型为第一个包中的接口类型.
我写的代码如下:
第一个包:
package ch10.package01;
public interface QQ {
void f();
void u();
}
复制代码
第二个包:
package ch10.package02;
import ch10.package01.QQ;
public class Outer01 {
protected class Inter01 implements QQ{
public void f(){
System.out.println("Inter01.f()");
}
public void u(){
System.out.println("Inter02.u()");
}
}
public static void main(String[] args){
Outer01 o=new Outer01();
}
}
复制代码
第三个包:
package ch10.package03;
import ch10.package02.Outer01;
import ch10.package01.QQ;
public class Outer02 extends Outer01{
public QQ qq(){
return new Inter01();
}
}
复制代码
问题在于return new Inter01();这句话提示错误
The constructor Outer01.Inter01() is not visible
虽然内部类是protected的,但Outer02 extends Outer01 为什么还是不可以访问呢?
作者:
梁志仲
时间:
2012-7-24 00:34
内部类是protected的,内部类的默认构造函数也是protected的。创建内部类对象调用其构造函数时,由于构造函数被限制起来了,所以创建不了。protected的访问权限是同一个包中被调用或者是该类的子类调用。本例中Outer02继承的是Outer01,而不是Inter01,又是在不同的包中,因此调用不了。
作者:
张凯
时间:
2012-7-24 14:47
周玉龙 发表于 2012-7-24 01:01
3:权限修饰符
同一个类中 同一个包中 不同包中的子类中 不同包中
private OK
看来还是基本功不扎实啊,谢谢了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2