# 内部类

内部类分为四种:

  1. 成员内部类
  2. 局部内部类
  3. 匿名内部类
  4. 静态内部类

接下来逐一介绍

# 成员内部类

成员内部类是位于外部内的里面,类似外部类的属性存在,特征也与外部类属性相似。

# 特点

  1. 内部类可以访问外部类属性和方法(包括私有方法)
  2. 外部类必须通过内部类实例才能访问内部类

# 代码

class Circle {
    private double radius = 0;
    public static int count =1;
    public Circle(double radius) {
        this.radius = radius;
    }
     
    class Draw {     //内部类
        public void drawSahpe() {
            System.out.println(radius);  //外部类的private成员
            System.out.println(count);   //外部类的静态成员
        }
    }
}

# 注意

  1. 外部类和内部类存在相同的属性时,默认调用内部类属性,如果要调用外部类则需要指定:外部类.this.成员属性/方法
  2. 其他类要创建其内部类,必须要先实例其外部类,再通过外部类创建内部类
  3. 注意访问控制符,由于成员内部类与成员属性类似,因此支持多种访问控制符

# 局部内部类

局部内部类是指在方法中或在作用域范围内的内部类,这也是与成员内部类的区别

# 代码

class People{
    public People() {
         
    }
}
 
class Man{
    public Man(){
         
    }
     
    public People getWoman(){
        class Woman extends People{   //局部内部类
            int age =0;
        }
        return new Woman();
    }
}

# 匿名内部类

应该是开发人员用得最多得内部类,这里不做赘述。

# 代码

new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 
            }
        }

# 静态内部类

同成员内部类很类似,但多了static修饰。

但要特别注意,静态内部类不依赖于外部类实例,这与静态属性一样,并且静态内部类不能使用外部类的非static成员属性或方法。

# 代码

public class Test {
    public static void main(String[] args)  {
        Outter.Inner inner = new Outter.Inner();
    }
}
 
class Outter {
    public Outter() {
         
    }
     
    static class Inner {
        public Inner() {
             
        }
    }
}

# reference

https://www.cnblogs.com/dolphin0520/p/3811445.html

修改于: 8/11/2022, 3:17:56 PM