13 Java外部类和内部类

成员内部类demo

/**
 * @author:
 * @date:2021/12/27
 * @description: 成员内部类样例
 */
public class OutClass {
    private String name;

    public OutClass(String name) {
        this.name = name;
    }

    public class InClass {
        private String name;

        public InClass(String name) {
            this.name = name;
        }
    }
}

InClass是和OutClass的成员变量是同一个层级的,并且是非静态的。像InClass这样的类,我们就称之为成员内部类。

一、在外部类(如示例代码OutClass中)使用成员内部类(InClass)

@Getter
@Setter
public class OutClass {
    private String name;

    private InClass inClass;
    private InClass inClass2=new InClass("内部类");

    public OutClass(String name) {
        this.name = name;
        this.inClass=new InClass("内部类");
    }
    @Getter
    @Setter
    public class InClass {
        private String name;

        public InClass(String name) {
            this.name = name;
        }
    }
}

在OutClass类中,定义了一个InClass的成员变量,这样的内部类使用方式从编码的形式来说和使用其他类是没有什么差别的。 

二、在其他类中使用OutClass的内部类

@Getter
@Setter
public class OutClass {
    private String name;

    private InClass inClass;
    
    private InClass inClass2=new InClass("内部类");
    
    public OutClass(String name) {
        this.name = name;
        this.inClass=new InClass("内部类");
    }
    
    @Getter
    @Setter
    public class InClass {
        private String name;
        public InClass(String name) {
            this.name = name;
        }
    }
    
    public static void main(String[] args) {
        OutClass outClass=new OutClass("外部类");
        OutClass.InClass inClass=outClass.new InClass("内部类");
    }
    
}

注意:内部类的访问权限,最好不要private

三、内部类中调用外部类的方法或者变量名

@Getter
@Setter
public class OutClass {
    private String name;

    private InClass inClass;

    private InClass inClass2=new InClass("内部类");

    //空方法,用来在内部类中调用测试使用。
    public void voidMethod(){}

    public OutClass(String name) {
        this.name = name;
        this.inClass=new InClass("内部类");
    }

    @Getter
    @Setter
    public class InClass {
        private String name;
        public InClass(String name) {
            this.name = name;
        }
        public String info(){
            //调用外部类的方法:外部类名.this.变量名或方法名
            OutClass.this.voidMethod();
            StringBuilder sb=new StringBuilder();
            //调用外部类的变量:外部类名.this.变量名或方法名
            sb.append("外部类的name:"+OutClass.this.name);
            sb.append("\n");
            sb.append("内部类的name:"+this.name);
            return sb.toString();
        }
    }
    
    public static void main(String[] args) {
        OutClass outClass=new OutClass("外部类");
        OutClass.InClass inClass=outClass.new InClass("内部类");
        System.out.println(inClass);//com.xxxx.Entity.OutClass$InClass@6a5fc7f7
        System.out.println(inClass.info());
        //外部类的name:外部类
        //内部类的name:内部类
    }

}

注意:

成员内部类不能有静态变量、方法

因为成员内部类是作为外部类的对象的成员来使用的,所以成员内部类中是不能有静态变量、方法的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值