内部类 --java学习笔记

内部类

  • 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,那么这个类就是内部类
  • 当一个类的内部包含了一个整体的事务,且这个事务没必要单独设计时,就可以把这个事务设计成内部类

 内部类四种形式:

  • 成员内部类
    就是类中的一个普通成员,类似普通的成员变量、成员方法
    内部类 --java学习笔记_第1张图片
    成员内部类不能直接new创建
     要先new出外部类再.new 内部类

    使用方法与普通的类一样

    成员内部类可以正常访问外部类的实例成员和静态成员,可以把成员内部类的方法理解为一个正常的类方法,可以在成员内部类的类方法中通过外部类名.this.变量名拿到外部类的同名成员变量
    内部类 --java学习笔记_第2张图片
    test结果:
    内部类 --java学习笔记_第3张图片
     
  • 静态内部类
    有static修饰的内部类,属于外部类自己持有
    内部类 --java学习笔记_第4张图片
    静态内部类的创建​​​​​​​
    使用方法与普通类一样
    访问权限同静态方法一样,不可以访问外部类的实例成员,但是可以访问外部类的静态成员内部类 --java学习笔记_第5张图片
    test结果:
  • 局部内部类
    定义在方法中、代码块中、构造器等执行体中的类
    鸡肋语法,用处不大,知道就行
  • 匿名内部类
    一种特俗的局部内部类,所谓匿名,指的是程序员不需要为这个类声明名字
    内部类 --java学习笔记_第6张图片
    运行结果:
    内部类 --java学习笔记_第7张图片
    匿名内部类通常作为一个参数传递给方法
    案例:设计一个方法使发出各种动物不同的叫声
    public class Test {
        public static void main(String[] args) {
            cry(new Animal(){    //直接调用匿名内部类对象作为实参
                @Override
                public void cry() { //实现cry方法
                    System.out.println("喵喵喵的叫");
                }
            });
        }
    
        public static void cry(Animal a){   //设计一个方法用来发出各种动物的叫声
            a.cry();
        }
    }
    
    interface Animal { //接口Animal
        public abstract void cry();
    }

    运行结果:
    内部类 --java学习笔记_第8张图片
    匿名内部类不是主动去用,而是需要的时候被动去用,比如某些方法需要一个接口类型的对象,就需要在实参部分直接写一个匿名内部类
    最终的核心目的是:简化代码

 

你可能感兴趣的:(学习笔记,学习,笔记,java,面向对象,内部类)