package ml;
public interface Test1{
void ll();
}
//////////////////////////////////
package ml2;
import ml.Test1;
public class Hll{
protected class Test2 implements Test1{
public void ll(){
System.out.println("yuankdk");
}
}}
//////////////////////////////////////
package ml3;
import ml2.*;
import ml.Test1;
public class Test3 extends Hll{
Test1 jj(Test3 k){
return k.new Test2();
}
public static void main(String [] args){
Test3 w=new Test3();
Test1 e=w.jj(w);
e.ll();
}
}
thingking in java 里面的一道练习题目,大家帮忙看看怎么才能调好上面的程序
public interface Test1{
void ll();
}
//////////////////////////////////
package ml2;
import ml.Test1;
public class Hll{
protected class Test2 implements Test1{
public void ll(){
System.out.println("yuankdk");
}
}}
//////////////////////////////////////
package ml3;
import ml2.*;
import ml.Test1;
public class Test3 extends Hll{
Test1 jj(Test3 k){
return k.new Test2();
}
public static void main(String [] args){
Test3 w=new Test3();
Test1 e=w.jj(w);
e.ll();
}
}
thingking in java 里面的一道练习题目,大家帮忙看看怎么才能调好上面的程序
import ml.Test1;
public class Hll{
protected class Test2 implements Test1{
public void ll(){
System.out.println("yuankdk");
}
}
protected Test2 f(){
return new Test2();
}}////////////
package ml3;
import ml2.*;
import ml.Test1;
public class Test3 extends Hll{
Test1 jj(Test3 k){
return k.f();
}
public static void main(String [] args){
Test3 w=new Test3();
Test1 e=w.jj(w);
e.ll();
}
}
public Test2(){}
这是为什么? 我的SuperClass类里的内部类InnerClass已经被定义为protected了, 而且Java保证了被protected所修饰的东西都可以在其子类中使用呀!!! 但, 请再仔细看看错误信息的内容, 原来并不是InnerClass类有什么问题, 而是InnerClass类中的InnerClass()方法出现了问题, InnerClass()这不是InnerClass类的构造函数吗!!! 看来问题找到一半了, 我们在学习Java的时候都知道, 如果一个类没定义任何形式的构造函数时, Java编译器会自动为类加上一个, 但问题就在这, 很多人不会重视这个自动被加上的构造函数的访问级别为何! 不过在此提到了可能大家也就都想起来了, 事实上这个被自动加上的构造函数的访问级别与类相同! 我们在回到刚才的问题上, 这时我们会发现原来InnerClass类在定义时并没有写构造函数, 编译时被自动加入的构造函数访问级别与类相同, 也就是protected. 这时我想大家应该明白为什么程序会出问题了吧!!!
引于:http://blog.csdn.net/clarkdu/archive/2005/04/02/334925.aspx