黑马程序员技术交流社区
标题:
关于局部内部类
[打印本页]
作者:
李芳池
时间:
2013-4-4 00:58
标题:
关于局部内部类
本帖最后由 李芳池 于 2013-4-4 17:45 编辑
interface Inter{
public abstract void function();
}
//外部类
class Outer{
public Inner method(){ //如果改成Inter(父类引用,则正常)
final int a=3;
//局部内部类
class Inner implements Inter{
public void function(){
System.out.println("a= "+a);
}
}
return new Inner();
}
}
class FinalVariable{
public static void main(String[] args){
Outer out=new Outer();
out.method().function();
/*
// 如果上面改成父类引用,则没问题
Inter in=out.method();
in.function();
*/
}
}
复制代码
为什么返回父类引用可以,而自身引用却报不兼容类型?
function为什么又找不到?能否通俗易懂解释下
作者:
柴乔军
时间:
2013-4-4 01:46
当调用method方法的时候,局部内部类才被加载进内存,并返回时进行了实例化,而该方法在外部类加载时就要加载进内存,此时Inner还不存在
作者:
邵彩华
时间:
2013-4-4 07:06
呵呵 Inner作为局部内部类,是不可以修饰它所在的局部(方法)的。因为method方法没运行的时候,Inner是不存在的。也就是先运行method 才会加载Inner.
在编译的时候,会把程序涉及到的文件编译成class,但由于方法未运行,所以Inner在编译期间是不会被编译成class的,也就是编译器检查语法的时候找不到修饰method的Inner类,自然会报错,说:找不到文件。
作者:
田光峰
时间:
2013-4-4 10:22
内部类可以调用父类中的所有方法,如果内部类是静态的则只能调用父类中的静态成员。内部类如果是局部内部类是不能是静态的,因为静态只能修饰成员方法。
如果想创建内部类必修要先有父类对象才可以想创建。
父类名.内部类名 引用名=new 父类名().new 内部类名();
作者:
打工人
时间:
2013-4-4 16:32
若还有问题,继续追问; 没有的话,尽量及时将帖子分类改成【已解决】~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2