目录
注意事项1:在实例内部类当中,不可以定义一个静态的成员变量。 因为实例内部类的调用需要依赖一个对象,static不依赖对象。
注意事项2: 如果一定要在实例内部类中定义一个静态的成员变量,使用static final修饰。常量是在编译的时候确定的。
注意事项4: 如果实例内部类的成员变量和外部类的成员变量相同,打印的是实例内部类的属性
注意事项5:在实例内部类中,包含两个this,一个是自己的this,一个是外部类的this,可以通过外部类类名.this
注意事项1:在静态内部类中,不能使用外部类的普通成员变量。因为普通成员变量需要对象。
注意事项2:实例静态内部类对象。new一个外部类.静态内部类
定义在类内部的类,叫做内部类。内部类分为四种:
本地内部类(定义在方法中的类)、实例内部类、静态内部类、匿名内部类
- class OutClass{
- public int data1 = 1;
- public static int data2 = 2;
- private int data3 = 3;
- // 实例内部类
- class InnerClass{
- public int data1 = 1111;
- public int data4 = 4;
- // 1.在实例内部类当中,不可以定义一个静态的成员变量。 因为实例内部类的调用需要依赖一个对象,static不依赖对象
- // public static int data5 = 5;
- // 如果非要用,写称static final修饰 常量是在编译的时候确定的
- public static final int data5 = 5;
- private int data6 = 6;
- public void func(){
- System.out.println("这是实例内部类的func方法");
- }
- }
- }
- class OutClass{
- public int data1 = 1;
- public static int data2 = 2;
- private int data3 = 3;
- // 实例内部类
- class InnerClass{
- public int data1 = 1111;
- public int data4 = 4;
- public static final int data5 = 5;
- private int data6 = 6;
- public void func(){
- System.out.println("这是实例内部类的func方法");
- // 在实例内部类中,包含两个this,一个是自己的this,一个是外部类的this的。可以通过外部类类名.this
- System.out.println(this.data1);
- System.out.println(OutClass.this.data1);
- }
- }
- }
- public class TestDemo3 {
- public static void main(String[] args) {
- // 2.创建实例内部类的对象 依赖外部类的对象 实例内部类对象,一定要先实例外部类
- OutClass outClass = new OutClass();
- OutClass.InnerClass innerClass = outClass.new InnerClass();
- innerClass.func();
- }
- }
可以用于实现链表时,节点类使用实例内部类
- class TestLink{
- class Node{
-
- }
- }
- class OutClass{
- public int data1 = 1;
- public static int data2 = 2;
- private int data3 = 3;
- // 静态内部类
- static class InnerClass{
- public int data4 = 4;
- public static final int data5 = 5;
- private int data6 = 6;
-
- public void func(){
- System.out.println("这是实例内部类的func方法");
- }
- }
- }
非要使用,在静态内部类中,实例一个外部类对象。通过这个引用,来获得外部类的普通成员变量。
- public static void main1(String[] args) {
- // new一个外部类.静态内部类
- OutClass.InnerClass innerClass = new OutClass.InnerClass();
- innerClass.func();
- }
- public class Demo1 {
- public static void main(String[] args) {
- Thread t = new Thread(){
- @Override
- public void run() {
- System.out.println("hello thread");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- };
- t.start();
- while (true){
- System.out.println("hello main");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
匿名类在多线程中使用。