java内部类

什么是内部类 ?

将一个类写在一个类的里面,那么写在里面的这个类就叫做内部类。例如:

//Outer是外部类
public class Outer {
    //Inner是内部类
    class Inner {
    }
}


内部类可以分为: 成员内部类 + 局部内部类

在内部类总可以直接访问外部类的所有成员


成员内部类 是定义在类的成员位置,与类中的成员变量是 相似的,

//Outer是外部类
public class Outer {
    // name 是一个成员变量
    String name;
    //Inner是内部类  , Inner也可以认为是一个成员变量,Inner的调用方式 与修饰符 方面与name都是差不多的
    class Inner {
        public void method1() {
            /**
             * 内部类可以直接访问外部类的成员
             * 为什么可以这样,这个成员变量不是非静态的吗?
             *   因为这里定义的内部类是一个非静态的成员变量,当你想要调用这个成员变量的时候
             *   必须是使用对象来调用,name必须已经初始化了(就算是null也是已经初始化了)。
             *   所以非静态的内部类是可以直接调用外部类的所有成员的
             */
            System.out.println(name);
        }
    }
}

所以成员内部类,也可以使用成员的修饰符 public static 等,因为它一个类,所以也可以实现接口或者是继承类

调用 成员内部类 与 调用成员变量 是相似的

public class Test {

    public static void main(String[] args) {
        //当你访问非静态的 成员变量的时候是使用 对象.成员 来访问的
        String name = new Outer().name; //必须使用 对象.成员来访问
        //而成员内部类也是一个内部类,所以也要使用这种方式
        Outer.Inner inner = new Outer().new Inner();
        //也可以调用内部类的方法
        inner.method1();
    }

}


其中使用成员内部类 还有一些语法要注意的

public class Outer {
    int i = 1;
    class Inner {
        int i = 2;
        public void method1() {
            int i = 3;
            //就近原则,会打印 3 出来
            System.out.println(i);
            //打印 2
            System.out.println(this.i);
            //打印 1
            System.out.println(Outer.this.i);
        }
    }
}

局部内部类 定义在外部类方法中。例如:

public class Outer {

    int i = 1;

    public void method() {
        //局部内部类 定义在方法里面
        class Inner {
            int i = 2;
            public void method1() {
            }
        }
        //只能在该方法中创建对象调用,外部是无法操作,也不知道你这个类的
        Inner inner = new Inner();
        inner.method1();
    }
}





内部类的实际使用:  匿名内部类是实际使用得比较多的

·· 匿名内部类是局部内部类的一种,也就是说,它是定义在某一个方法的里面的

定义匿名是基于下面的情况: 临时定义某一指定类型的子类,定义后便立即创建该子类对象

使用匿名内部类 必然会有 继承 或者 实现的 关系。创建的对象必定是一个子类,它的父类就是new 关键字的后面











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值