java内部类

内部类是指定义在另一个类内部的类(类中类)。Java中的内部类分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。

内部类优势

1.内部类与外部类,可以方便访问各自的私有属性或方法

2.内部类也是一种封装,是对类的部分信息的封装

成员内部类:定义在另一个类的内部,并且不是静态的。它可以访问外部类的成员变量和方法,包括私有成员。

/**
 * @author :javaRao
 * @date :Created in 2023-07-06 14:11
 * @description:成员内部类
 */
public class In2Demo {
    public static void main(String[] args) {
        Ostr2 o=new Ostr2(1,"张三");
        Ostr2.Cin c=o.new Cin();
        c.pr();
    }
}
class Ostr2{
    int id;
    String name;
    class Cin{
        String type="数学";
        int num=99;
        public void pr(){
            System.out.println(id+" "+type+"  "+num);
        }
    }
    public Ostr2(int id,String name){
        this.id=id;
        this.name=name;
    }
}

静态内部类:定义在另一个类的内部,但被声明为静态的。静态内部类不持有对外部类对象的引用。(因为java先加载静态类)在class In4调用不了外部(class 04)的非静态属性,只能调用静态属性。

/**
 * @author :javaRao
 * @date :Created in 2023-07-06 14:43
 * @description:静态内部类
 */
public class In4Demo {
    public static void main(String[] args) {
//        O4 o4=new O4();
//        O4.In4 a=o4.new In4();
        O4.In4 o=new O4.In4();
        o.fun();
    }

}
class O4{
    public static String name="口红";
    public static int pri=1200;
    //static 内部类---材料
    public static class In4{
        public String addr="越南";
        public void fun(){
            System.out.println(addr);
            System.out.println(pri);
        }
    }
}

局部内部类:定义在方法或作用域内部的类。局部内部类只在定义它的代码块中可见,外部类无法访问它。

 * @author     :javaRao
 * @date       :Created in 2023-07-06 15:07
 * @description:方法内含有一个内部类:方法内部类把内部类的信息和调用,全部封装在方法中
 */
public class In5 {
    public static void main(String[] args) {
        O5 o5=new O5();
        o5.dis(4);
        new O5().dis(1);
    }
}
class O5{
    String name="商家a";
    int num=5;//钱
    //支付
    public void dis(int te){
        //内部类
        class Inx{
            public void fun(){
                System.out.println(num);
                System.out.println(te);
                System.out.println(name);
            }
        }
        //这里调用
        new Inx().fun();
    }
}

匿名内部类:没有显式的类名,直接通过new关键字创建并实例化。通常用于创建简单的事件处理器和回调函数。代码示例展示了如何使用匿名内部类来实现一个接口。在这个例子中,匿名内部类实现了MyIn接口,并重写了playre方法。匿名内部类的实例被立即创建,并调用了play方法。

/**
 * @author :javaRao
 * @date :Created in 2023-07-06 15:21
 * @description:匿名内部类
 */
public class In6 {
    public static void main(String[] args) {
        // 创建一个匿名内部类的实例,并实现MyIn接口
        new MyIn() {
            @Override
            public void play() {
                System.out.println("跳个楼吧");
            }

            @Override
            public void re() {
                System.out.println("再跳个楼");
            }
        }.play();  // 调用匿名内部类的play方法  如果将play()替换为re()则是调用匿名内部类的re方法输出再跳个楼吧。
    }
}

// 定义MyIn接口
interface MyIn {
    void play();
    void re();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值