- 总结:
- 外部类调用非静态内部类
- 1、外部类的静态方法中
-
创建内部类的对象调用非静态资源 new 外部类名().new 内部类名(); 只能以此方式创建对象
-
内部类名.静态常量
- 2、外部类的非静态方法中
-
创建内部类的对象调用非静态资源 new 外部类名().new 内部类名();或new 内部类名()
-
内部类名.静态常量
- 3、内部类的资源无所谓私有或非私有都可以被外部类可见
- 4、 其他类中
-
不论静态方法还是非静态方法中,只能通过此方式创建对象,new 外部类名().new 内部类名();然后利用对象来引用非静态非私有资源
-
对于内部类的非私有静态属性,都是外部类名.内部类名.属性名 但非静态内部类中只有非私有静态常量
-
内部类的私有属性对外部类不可见
代码没必要看
package com.hezhonghao.develop.nonstaticinnerclass;
/*
* 外部类调用非静态内部类
* 1、外部类的静态方法中
* 创建内部类的对象调用非静态资源 new 外部类名().new 内部类名(); 只能以此方式创建对象
* 内部类名.静态常量
* 2、外部类的非静态方法中
* 创建内部类的对象调用非静态资源 new 外部类名().new 内部类名();或new 内部类名()
* 内部类名.静态常量
* 3、内部类的资源无所谓私有或非私有都可以被外部类可见
* */
public class OuterClass {
// 静态
public static int staticNum;
public static void staticMethod() {
System.out.println("outer static method");
// 外部类静态方法调用非静态内部类
// InnerClass innerClass = new InnerClass(); 不可以这样在外部类的静态方法中创建非静态内部类对象
InnerClass innerClass = new OuterClass().new InnerClass();
innerClass.innerInstanceNum = 1;
innerClass.innerInstanceMethod();
System.out.println("InnerClass.INNER_NUM = " + InnerClass.INNER_NUM);
}
// 非静态
public int instanceNum;
public void instanceNum() {
System.out.println("outer instance method");
// 外部类非静态方法调用非静态内部类
InnerClass innerClass = new InnerClass();
innerClass.innerInstanceNum = 1;
innerClass.innerInstanceMethod();
System.out.println("InnerClass.INNER_NUM = " + InnerClass.INNER_NUM);
}
class InnerClass {
// 静态
// 只可定义静态常量,不可定义静态方法个静态成员变量
// public static int innerStaticNum;
// public static void innerStaticMethod(){}
public static final int INNER_NUM = 1;
// 非静态
public int innerInstanceNum;
public void innerInstanceMethod() {
System.out.println("inner instance method");
}
}
}
package com.hezhonghao.develop.nonstaticinnerclass;
/*
* 其他类中,不论静态方法还是非静态方法中,只能通过此方式创建对象
* new 外部类名().new 内部类名();然后利用对象来引用非静态非私有资源
*
* 对于内部类的非私有静态属性,都是外部类名.内部类名.属性名 但非静态内部类中只有非私有静态常量
*
* 内部类的私有属性对外部类不可见
* */
import org.junit.Test;
public class TestClass {
public static void main(String[] args) {
OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();//只能这样创建对象
innerClass.innerInstanceMethod();
innerClass.innerInstanceNum = 1;
//对于内部类的静态属性,都是外部类名.内部类名.属性名 ↓
System.out.println("OuterClass.InnerClass.INNER_NUM = " + OuterClass.InnerClass.INNER_NUM);
// 私有属性对外部类不可见
}
@Test
public void otherInstanceMethod() {
OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();//只能这样创建对象
innerClass.innerInstanceMethod();
innerClass.innerInstanceNum = 1;
//对于内部类的静态属性,都是外部类名.内部类名.属性名 ↓
System.out.println("OuterClass.InnerClass.INNER_NUM = " + OuterClass.InnerClass.INNER_NUM);
// 私有属性对外部类不可见
}
}