Poo*_*jan 1 java oop inheritance class inner-classes
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.
}
}
Run Code Online (Sandbox Code Playgroud)
我创建一个包p1并创建一个内部类名demo12.我想要访问demo12 fun2包中的方法p2.怎么做?
在课堂上做任何改变demo2.直接或间接我想从类中访问该方法demo2而不需要更改代码demo1.
为了demo12从demo2类访问您的内部类,demo2类必须扩展demo1.此外,内部类与类的实例相关联,因此您无法直接从静态方法调用它.
检查内部类和嵌套类之间的区别.
静态嵌套类
与类方法和变量一样,静态嵌套类与其外部类相关联.和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们.
内在的类
与实例方法和变量一样,内部类与其封闭类的实例相关联,并且可以直接访问该对象的方法和字段.此外,由于内部类与实例相关联,因此无法定义任何静态成员本身.
编辑:
我建议检查你的设计是否不能简化类层次结构.特别关注内部和静态嵌套类之间的差异.
你的内部类demo12也被标记为受保护,你也可以扩展它.检查这个hack:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |