成员内部类、成员静态内部类

内部类:成员内部类(特例:静态内部类)、局部内部类(匿名内部类)

  1. 成员内部类:定义在外部类当中
    1.定义在外部类当中,和外部类的属性、方法、构造,处于平等地位。
    2.成员内部类拥有独立的class文件,其class文件的名字规则———外部类的类名+$+内部类的类名
    3.成员内部类可以使用访问修饰符,使用后的效果和属性、方法、构造是一样的
    4.成员内部类内部可以定义各种属性、构造、方法、初始化块、甚至可以再定义内部类
    5.成员内部类中的属性和方法不能是static的

  2. 成员内部类在外部产生对象的语法
    1.外部类 外部类变量名 = new 外部类()
    外部类.内部类 变量名 = 外部类变量名.new 内部类()
    Outer outer = new Outer();
    Outer.Inner inner =outer.new Inner();
    2.外部类.内部类 变量名 = new 外部类().new 内部类()
    Outer.Inner inner = new Outer().new Inner();

  3. 成员内部类操作外部类的属性或方法:外部类.this.属性(或方法)

  4. 成员静态内部类:用static修饰的成员内部类
    1.定义在外部类当中,和外部类的属性、方法、构造,处于平等地位。
    2.成员静态内部类拥有独立的class文件,其class文件的名字规则———外部类的类名+$+内部类的类名
    3.成员静态内部类可以使用访问修饰符,使用后的效果和属性、方法、构造是一样的
    4.成员静态内部类内部可以定义各种属性、构造、方法、初始化块、甚至可以再定义内部类
    5.成员静态内部类中的属性和方法可以是static的,与普通成员内部类不同

  5. 成员静态内部类在外部产生对象的语法
    1.外部类.内部类 变量名 = new 外部类.内部类()
    Outer.Inner inner = new Outer.Inner();
    2.无需产生外部类的对象,直接使用外部类类名。内部类类名的方法作为它的类型,new出来即可

  6. 成员静态内部类不能操作外部类的非静态属性、方法,只能操作外部类中静态的属性、方法
    1.内部类的应用场景:我们在描述A事物的时候,发现描述的A事物内部还存在另外一个比较复杂的事物B时候,而且这个比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候我们就可以使用内部类来描述B事物
    2.内部类的好处:内部类可以直接访问外部类的所有成员
    3.内部类要注意的事项:
    a.如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量。
    解决方法:外部类.this.成员变量名 来指定访问外部类的成员。示例:Outer.this.print()
    b.私有的成员内部类,只能在外部类提供一个方法创建内部类进行访问
    c.成员内部类一旦出现了静态成员,那么该类也必须使用static进行修饰

访问方式1示例
class Outer {
    // 成员内部类
    int x = 100;

    class Inner {
        int i = 10;

    public void print() {
        System.out.println("这个是成员内部类的print方法!");
        }
    }

    public void instance() {
        // 在外部的方法中创建了内部类的对象,然后调用对象的方法
        Inner inner = new Inner();
        inner.print();
        System.out.println("x = " + this.x);
    }
}

public class Demo12 {

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.instance();
    }
}
访问方式2示例
class Outer {
    // 成员内部类
    int x = 100;

    class Inner {
        int i = 10;

    public void print() {
        System.out.println("这个是成员内部类的print方法!");
    }
    }
}

public class Demo12 {

    public static void main(String[] args) {
        Outer.Inner inner = new Outer().new Inner();
        inner.print();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值