同学发了这么些代码,报错,问怎么解决。
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对象a
System.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:非静态内部类之所以可以直接访问外部类的方法,是因为创建非静态内部类时,有一个隐含的外部类引用被传递进来。