java内部类

目录

1. 内部类概述

2.成员内部类

3.局部内部类

3.匿名内部类

1. 内部类概述

内部类:就是在一个类中定义一个类。举例: 在一个类A的内部定义一个类B,类B就被称为内部类

格式:

public class 类名{
    修饰符 class 类名{
    }
}

范例:
 

public class Outer{ 
    public class Inner {
    }
}

内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

例如:

public class Outer {
    private int num = 10;

    public void method() {
        Inner inner = new Inner();//必须创建对象
        inner.show();//外部类要访问内部类的方法
    }

    public class Inner {
        public void show() {
            System.out.println(num);//内部类可以直接访问外部类的成员,私有
        }
    }
}

2.成员内部类

按照内部类在类中定义的位置不同,可以分为如下两种形式
在类的成员位置:成员内部类
在类的局部位置:局部内部类

成员内部类,外界创建对象格式:

外部类名.内部类名 对象名=外部类对象.内部类对象;

例如:

Outer1.Inner oi = new Outer1().new Inner();

例如:

public class InnerDemo {
    public static void main(String[] args) {
        //创建内部类对象,调用方法
        Outer1.Inner oi = new Outer1().new Inner();
        oi.show();//10
    }
}

class Outer1 {
    private int num = 10;//成员变量

    //成员内部类
    public class Inner {
        public void show() {
            System.out.println(num);//内部类直接访问外部类的成员,私有
        }
    }
}

上面这种写法不常见,一般是下面这种写法

public class InnerDemo01 {
    public static void main(String[] args) {
        Outer2 o = new Outer2();
        o.method();//10
    }
}

class Outer2 {
    private int num = 10;//成员变量

    private class Inner {
        public void show() {
            System.out.println(num);//内部类直接访问外部类的成员,私有
        }
    }

    public void method() {
        Inner i = new Inner();
        i.show();
    }
}

3.局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用

该类可以直接访问外部类的成员,也可以访问方法内的局部变量

public class OuterDemo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();//10 20
    }
}

class Outer {
    private int num = 10;

    public void method() {
        int num1 = 20;
        class Inner {
            public void show() {
                System.out.println(num);
                System.out.println(num1);
            }
        }
        Inner i = new Inner();
        i.show();
    }
}

3.匿名内部类

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
格式

new 类名或者接口名(){
    重写方法;
};

例如:

new Inter(){
    public void show(){
    }
};

本质: 是一个继承了该类或者实现了该接口的子类匿名对象

例如:

public class OuterDemo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();//匿名内部类
    }
}

class Outer {
    public void method() {
       /* new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        }.show();
        */
        Inter i = new Inter() {
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };
        i.show();
    }
}

interface Inter {
    void show();
}

你可能感兴趣的:(java,开发语言)