Java基础:N种内部类 (拓展)

目录

定义

成员内部类

静态内部类

 特别的内部类

局部内部类

匿名内部类(没有名字的类)

定义

内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。

成员内部类

成员内部类是最普通的一种内部类,成员内部类可以访问外部类所有的属性和方法。但是外部类要访问成员内部类的属性和方法,必须要先实例化成员内部类。
注意: 成员内部类里面不能包含静态的属性和方法

建立一个外部类Outer,其中有内部类Inner

public class Outer {

    private int id = 10;
    public void out(){
        System.out.println("这是外部类的方法");
    }

    public class Inner{
        public void in(){
            System.out.println("这是内部类的方法");
        }
        //获取外部类的私有属性
        //正常类是做不到的,正常类属性私有,需要暴露get和set方法,然后通过调用get和set方法去获取
        public void getID(){
            System.out.println(id);
        }
    }

}

测试类Application

public class Application {
    public static void main(String[] args) {
        //new
        Outer outer = new Outer();
        //通过这个外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        //对象类型是Outer.Inner
        inner.in();//输出:这是内部类的方法
        inner.getID();//10
    }

}

静态内部类

静态内部类就是在成员内部类多加了一个 static 关键字。静态内部类只能访问外部类的静态成员变量和方法(包括私有静态)

 特别的内部类

public class A {
}
//一个Java类中可以有多个class类,但是只能有一个public class
class B{}
class C{}
class D{}

局部内部类

局部内部类就是定义在代码块内的一个内部类。比如在方法里面定义一个内部类,就是局部内部类。
局部内部类的作用范围仅仅就在它所在的代码块里。局部内部类不能被public ,protected,private以及static修饰,但是可以被final修饰。

public class A {
    //局部内部类:在方法里写的类
    public void method(){
        class B{
            public void in(){}
        }
    }
}

匿名内部类(没有名字的类)

public class NiMing {
    public static void main(String[] args) {
        //Apple apple = new Apple();  有名字的情况
        //没有名字的初始化类,不用保存到变量中
        new Apple().eat();

        //这个实现类是返回一个userService对象的,但是这个实现UserService也是没有名字的
        UserService userService = new UserService() {
            @Override
            public void hello() {

            }
        };
    }
}

class Apple{
    public void eat(){
        System.out.println("1");
    }
}

interface UserService{
    void hello();
}

参考博文:详解 Java 内部类_指点-CSDN博客_java 内部类原理什么是内部类?内部类的种类?内部类的作用?_T-bright的博客-CSDN博客_内部类的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kong清空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值