main方法中访问内部类

来源:互联网 发布:javascript map对象 编辑:程序博客网 时间:2024/06/05 07:28


同学发了这么些代码,报错,问怎么解决。


public class Test2 {public static void main(String[] args) {// TODO Auto-generated method stub A a =new A(5.5);System.out.println(a.x);}class A {public double x;public A(double x) {this.x = x;}}}



编译了一下,报错:


解决方法是 创建外部类对象,再使用外部类对象来new一个内部变量

public class Test2 {public static void main(String[] args) {Test2 test2 = new Test2();// 创建外部类Test对象A a = test2.new A(5.5);// 使用外部类对象a来new一个A对象aSystem.out.println(a.x);}class A {public double x;public A(double x) {this.x = x;}}}

对main方法而言,虽然写在类中,它是游离于任何类之外的,因此某类的非静态内部类对它而言是不直接可见的,也就无法直接访问。需要注意以下几点:
1:非静态内部类,必须有一个外部类的引用才能创建。
2:在外部类的非静态方法中,因为有隐含的外部类引用this,所以可以直接创建非静态内部类。
3:在外部类的静态方法中,因为没有this,所以必须先获得外部类引用,然后创建非静态内部类。
4:静态内部类,不需要外部类引用就可以直接创建。
5:同时静态的内部类,也不能直接访问外部类的非静态方法。
6:非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。


阅读全文
0 0
原创粉丝点击