java 成员内部类


文章同步更新(更好的排版):
一篇文章理清java成员内部类

一、定义

内部类:指一种嵌套的结构关系。即在一个类的内部除了属性和方法还可以继续定义一个完整的类


二、成员内部类

2.1 位置

在类的内部定义,与类的成员属性和成员方法一个级别

2.2 特点

  1. 成员内部类可以被任何访问修饰符修饰。如publicprotectedprivatedefault
  2. 成员内部类可以直接访问外部类的属性和方法。即使是私有属性和方法也可以访问
  3. 成员内部类中的属性,与外部类的属性同名时,成员内部类则需要使用 外部类类名.this.外部类属性名称 访问外部类的属性
  4. 成员内部类不能包含静态成员,但是可以包含静态常量

2.3 成员内部类的实例化方法

  1. 方法一:先创建外部类对象,然后根据外部类对象创建内部类对象
//第一步:创建外部类对象
外部类类名 外部类对象名 = new 外部类类名();

//第二步:根据外部类对象,创建内部类对象
外部类类名.内部类类名 内部类对象名 =外部类对象.new 内部类类名();
  1. 方法二:直接创建
外部类类名.内部类类名  内部类对象名 = new 外部类类名().new 内部类类名();

2.4 代码示例一:演示特点一

//相对于 Inner 来说 Outer 是外部类
public class Outer {

    //成员内部类
    //成员内部类可以被任何访问修饰符修饰
    public class Inner{ }
    private class Inner02{}
    protected class Inner03{}
    class Innner04{}

}

2.5 代码实例二:演示特点二

public class Outer02 {
    //成员属性
    private String name = "Tom";
    private int age = 18;


    //成员方法
    public void show(){
        System.out.println("名字为:"+name + age);
    }


    //成员内部类
    class Inner{
        //内部类的成员方法
        public void show(){

            //成员内部类可以直接访问外部类的属性和方法。即使是私有属性和方法也可以访问
            System.out.println(name + "\t" + age);

        }
    }
}

public class Test02 {
    public static void main(String[] args) {
        //第一种
        //第一步:创建外部类对象
        //外部类类名 外部类对象名 = new 外部类类名();
        Outer02 o1 = new Outer02();

        //第二步:根据外部类对象,创建内部类对象
        //外部类类名.内部类类名 内部类对象名 =外部类对象.new 内部类类名();
        Outer02.Inner inner1 = o1.new Inner();
        inner1.show();



        //第二种
        //外部类类名.内部类类名  内部类对象名 = new 外部类类名().new 内部类类名();
        Outer02.Inner inner2 = new Outer02().new Inner();
        inner2.show();

    }
}

2.6 代码实例三:演示特点三

public class Outer03 {
    //成员属性
    private String name = "Tom";
    private int age = 18;


    //成员内部类
    class Inner{
        //成员内部类的成员属性
        //此属性与外部类的属性重名了
        private String name = "GGBond";

        //内部类的成员方法
        public void show(){
            //show 方法里面的 name
            String name = "jack";

            //什么都没修饰,就会就近原则
            System.out.println("方法中的局部变量 name:" + name);
            System.out.println("内部类的实例属性 name:" + this.name);
            //成员内部类中的属性,与外部类的属性同名时,内部类则需要使用 外部类类名.this.外部类属性名称 访问外部类的属性
            System.out.println("外部类的实例属性 name:" + Outer03.this.name);

        }
    }
}

public class Test03 {
    public static void main(String[] args) {
        Outer03.Inner inner = new Outer03().new Inner();

        inner.show();
    }
}

2.7 代码示例四:演示特点四

public class Outer04 {

    //成员内部类
    class Inner{
        //成员内部类不能包含静态成员,但是可以包含静态常量
        private static int phone;
        public static void test(){}
        private static final int a = 1000;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值