package p1;
public class demo1{
public static void main(String []args){
}
protected class demo12{
protected int fun2(int a,int b){
return a*b;
}
}
package p2;
import p1.demo1;
public class demo2{
public static void main(String []args){
//access fun2 method here.
}
}
我创建了一个包p1
并创建了一个内部类名demo12
。我想要访问包demo12
中的fun2
p2
方法。怎么做?
在课程demo2
中做任何更改。直接或间接地我想从类demo2
访问该方法,而不需要更改代码demo1
。
答案 0 :(得分:5)
要从demo12
班级访问您的demo2
内部班级,demo2
班级必须延长demo1
。此外,内部类与类的实例相关联,因此您无法直接从静态方法调用它。
检查inner and nested classes之间的差异。
静态嵌套类
与类方法和变量一样,静态嵌套类是 与其外层相关联。和静态类方法一样,a 静态嵌套类不能直接引用实例变量或 在其封闭类中定义的方法:它只能通过它来使用它们 对象引用。
内部课程
与实例方法和变量一样,内部类是关联的 使用其封闭类的实例并可直接访问它 对象的方法和字段。另外,因为内部阶级是 与实例相关联,它无法定义任何静态成员 本身。
编辑:
我建议检查你的设计是否不能简化类层次结构。特别关注内部和静态嵌套类之间的区别。
你的内部班级demo12
也被标记为受保护,你也可以扩展它。检查这个黑客:
package p2;
import p1.demo1;
public class demo2 extends demo1 {
protected int foo( int a, int b ) {
return (new demo22()).fun2(a, b);
}
protected class demo22 extends demo12 {
protected int fun2( int a, int b ) {
return super.fun2(a, b);
}
}
public static void main( String[] args ) {
(new demo2()).foo(2, 3);
}
}
答案 1 :(得分:0)
您的班级demo2
应该继承demo1
:
class demo2 extends demo1 {...}