Java内部类学习

前言

由于Java语言不支持多继承,而在实际开发中可能会面临多重继承的场景的,内部类便可派上用场了。

内部类

java内部类分为: 成员内部类、静态内部类、方法内部类、匿名内部类 。

成员内部类

顾名思义,成员内部类作为类的成员,存在于某个类的内部。成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员

public class OutClass01 {
    private String name;
    private int age;

    public OutClass01(String name, int a){
        System.out.println("正在初始化外部类");
        this.name = name;
        this.age = age;
    }

    public void print(){
        System.out.println("外部类中的print方法");
        System.out.println("外部类中的name:"+name);
        System.out.println("外部类中的age:"+age);
    }



    class InnerClass01{
        public void print(){
            System.out.println("内部类中的print方法");
            System.out.println("内部类访问外部类中的name:"+name);
            System.out.println("内部类访问外部类中的age:"+age);
        }
    }

    public static void main(String[] args) {
        OutClass01 out = new OutClass01("Alex", 20);
        InnerClass01 in = out.new InnerClass01();
        out.print();
        in.print();
    }
}

静态内部类

静态内部类,作为类的静态成员,存在于某个类的内部。静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员

public class OutClass02 {
    private String name;
    private int age;
    private static String id = "0123456789";

    public OutClass02(String name, int a){
        System.out.println("正在初始化外部类");
        this.name = name;
        this.age = age;
    }

    public void print01(){
        System.out.println("外部类中的print方法");
        System.out.println("外部类中的name:"+name);
        System.out.println("外部类中的age:"+age);
    }

    public static void print02(){
        System.out.println("外部类中的print方法");
        System.out.println("外部类中的id:"+id);
    }



    static class InnerClass02{
        public void print(){
            System.out.println("内部类中的print方法");
            print02();
        }
    }

    public static void main(String[] args) {
        InnerClass02 in = new InnerClass02();
        in.print();
    }
}

方法内部类

方法内部类,存在于某个方法的内部,只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。

public class OutClass03 {
    public void print(){
        final int a = 10;

        class InnerClass03{
            int b = 20;
            public void print(){
                //使用所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
                System.out.println("访问内部类中的成员a:"+a);
                System.out.println("访问内部类中的成员b:"+b);
            }
        }

        InnerClass03 in = new InnerClass03();
        in.print();
    }

    public static void main(String[] args) {
        OutClass03 out = new OutClass03();
        out.print();
    }
}

匿名内部类

匿名内部类,存在于某个类的内部,但是无类名的类。匿名内部类的定义与对象的创建合并在一起,匿名内部类一般通过如下形式定义,并且在定义的同时进行对象的实例化。

public class OutClass04 {
    public void print(InnerClass04 in){
        in.show();
    }

    public static void main(String[] args) {
        OutClass04 out = new OutClass04();
        out.print(new InnerClass04(){
            //内部类主体
            public void show(){
                System.out.println("在匿名内部类中");
            }
        });
    }
}

class InnerClass04{
    public void show(){
        System.out.println("在InnerClass04类中");
    }
}

总结

本文介绍了Java中的四种匿名类,希望能加深读者对匿名类的理解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值