当前位置: 技术问答>java相关
这个protected的inner class错在哪里?
来源: 互联网 发布时间:2015-09-15
本文导语: //p2C1.java package p2; public class C1 { protected class C2 { void fun1() {} } } //T1.java import p2.*; public class T1 extends C1 { C1.C2 fun2() { return new C1.C2(); } } 编译时总是说p2.C1.C2是protected class,但我觉得既然T1是...
//p2C1.java
package p2;
public class C1 {
protected class C2 {
void fun1() {}
}
}
//T1.java
import p2.*;
public class T1 extends C1 {
C1.C2 fun2() { return new C1.C2(); }
}
编译时总是说p2.C1.C2是protected class,但我觉得既然T1是继承自C1,那么C1中的protected inner class不是也可以被T1使用吗?如果想达到这段代码的效果,该怎么该?
package p2;
public class C1 {
protected class C2 {
void fun1() {}
}
}
//T1.java
import p2.*;
public class T1 extends C1 {
C1.C2 fun2() { return new C1.C2(); }
}
编译时总是说p2.C1.C2是protected class,但我觉得既然T1是继承自C1,那么C1中的protected inner class不是也可以被T1使用吗?如果想达到这段代码的效果,该怎么该?
|
package p2;
public class C1 {
protected static class C2 {
void fun1() {}
}
}
//T1.java
import p2.*;
public class T1 extends C1 {
C1.C2 fun2() { return new C1.C2(); }
}
public class C1 {
protected static class C2 {
void fun1() {}
}
}
//T1.java
import p2.*;
public class T1 extends C1 {
C1.C2 fun2() { return new C1.C2(); }
}
|
package com;
public class C1
{
protected C2 getC2()
{
return new C2();
}
protected class C2
{
void fun1() {}
}
}
//T1.java
import com.*;
public class T1 extends C1
{
C2 fun2()
{
return this.getC2();
}
}
根据java的语法Protected是不能在继承类中“访问“的。
Access outside of a package:
Access Modifier Inherited Accessible
default (no modifier) No No
Public Yes Yes
Protected Yes No
Private No No
public class C1
{
protected C2 getC2()
{
return new C2();
}
protected class C2
{
void fun1() {}
}
}
//T1.java
import com.*;
public class T1 extends C1
{
C2 fun2()
{
return this.getC2();
}
}
根据java的语法Protected是不能在继承类中“访问“的。
Access outside of a package:
Access Modifier Inherited Accessible
default (no modifier) No No
Public Yes Yes
Protected Yes No
Private No No
|
我觉得是 C1.C2 fun2() 中的C1.C2的问题,试问一个inner class怎么能成为一种type用来声明一个函数的返回值呢?
可以在外部定义一个和inner class一样的class来代替C1.C2作为fun2()返回值的类型试试看。
我在外面上的网,没有JDK,楼主试的结果告一声,谢谢。
可以在外部定义一个和inner class一样的class来代替C1.C2作为fun2()返回值的类型试试看。
我在外面上的网,没有JDK,楼主试的结果告一声,谢谢。
|
好象放在一个文件里是可以的,就是这样,是可以的。
class C1
{
protected class C2
{
void fun1() {}
}
}
public class T1 extends C1
{
C1.C2 fun2() { return new C1.C2(); }
}
class C1
{
protected class C2
{
void fun1() {}
}
}
public class T1 extends C1
{
C1.C2 fun2() { return new C1.C2(); }
}