内部类学习

本文详细介绍了Java中的四种内部类:成员内部类、局部内部类、匿名内部类和静态内部类,并通过示例展示了它们的访问特性和使用场景。此外,还探讨了匿名内部类在接口实现中的应用。

1

内部类格式:
   public class 类名{
          修饰符 class 类名{

                    }
            }
内部类访问特点:
     内部类可以直掐访问外部类的成员,包括私有
     外部类要访间内部类的成员。必须创建对象

public class Outer {
    private int num = 10;

    public class Inner{
        public void show(){
            //内部类可以直掐访问外部类的成员,包括私有
            System.out.println(num);
        }
    }

    public void method(){
        //外部类要访间内部类的成员,必须创建对象
        Inner i = new Inner();
        i.show();
    }
}

2

成员局部类

成员内部类
public class Outer {
    private int num = 10;
    /*
    //传统方法
    public class Inner{
        public void show(){
            System.out.println(num);
        }
    }
     */
    //新方法
    private class Inner{
        public void show(){
            System.out.println(num);
        }
    }
    public void method(){
        Inner i = new Inner();
        i.show();
    }
}

测试类
public class OuterDemo {
    public static void main(String[] args) {
//        Outer.Inner oi = new Outer().new Inner();
//        oi.show();
        Outer o = new Outer();
        o.method();
    }
}

3

局部内部类:写在方法里
局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量

局部内部类
public class Outer {
    private int num = 10;
    public void method(){
        class Inner{
            private int num2 = 120;
            public void show(){
                System.out.println(num);
                System.out.println(num2);
            }
        }
        Inner i = new Inner();
        i.show();
    }
}
测试类
public class OuterDemo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

4

匿名内部类
  前提:
    存在一个类或者接口
    这里的类可以是具体类也可以是抽象类
格式:
    new 类名或者接口名(){
    重写方法;
    };

  本质是什么呢?
    是一个继承了该类或者实理了该接口的子类匿名对象

接口

public interface Inter {
    void show();
}

匿名内部类
public class Outer {
    public void method(){
        /*
        new Inter(){
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        }.show();

         */
        //多次调用
        Inter i = new Inter(){
            @Override
            public void show() {
                System.out.println("匿名内部类");
            }
        };
        i.show();
        i.show();
    }
}

测试类
public class OuterDemo {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.method();
    }
}

5

练习

接口类
public interface Jumpping {
    void jump();
}
测试类
public class JumppingDemo {
    public static void main(String[] args) {
        JumppingOperator jo = new JumppingOperator();
       /* Jumpping j = new Cat();
        jo.method(j);*/
        //使用匿名内部类可以不去在创建其他类直接写,直接继承抽象类或实现接口
        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("猫跳高");
            }
        });
        jo.method(new Jumpping() {
            @Override
            public void jump() {
                System.out.println("狗跳高");
            }
        });
    }
}
操作类
public class JumppingOperator {
    public void method(Jumpping j){
        j.jump();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqq00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值