• 一文让你学会 Java 中的内部类


    内部类

    概念

    如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。例如:身体和心脏的关系。又如:汽车和发动机的关系。

    分类

    1.成员内部类 2.局部内部类(包含匿名内部类)

    成员内部类的定义

    成员内部类定义格式:
    修饰符 class 外部类名称{  修饰符 class 内部类名称{    //...  }  //...}
    

    注意:内用外,随意访问;外用内,需要内部类对象。

    举例配合理解:

    成员内部类的使用

    如何使用成员内部类?有两种方式:1.间接方式:在外部类的方法当中,使用内部类;然后 main 只是调用外部类的方法。2.直接方式,公式:类名称 对象名 = new 类名称();【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();】

    举例配合理解:

    内部类的同名变量访问

    局部内部类的定义与使用

    举例配合理解:

    局部内部类的 final 问题

    匿名内部类

    如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。说白了就是想用一个接口,就必须有个实现类,在覆盖重写里面的抽象方法,而如果匿名内部类,那么就不需要实现类,直接在主方法里面 new 接口,补上大括号,重写抽象方法即可。

    匿名内部类的定义格式:

    接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法};小细节:注意大括号后面要有分号,不要忘记。

    举例配合理解:

    匿名内部类注意事项

    学习匿名内部类主要是让大家以后在阅读别人代码的时候,能够理解。并不代表以后都要这样写。因为匿名内部类有两个缺点:缺点 1:太复杂,太乱,可读性差。缺点 2:类没有名字,以后想重复使用,不能用。

    类作为成员变量类型

    代码举例:

    public class Weapon {    private String code; //武器的代号
        public Weapon() {    }
        public Weapon(String code) {        this.code = code;    }
        public String getCode() {        return code;    }
        public void setCode(String code) {        this.code = code;    }}
    
    public class Hero {
        private String name; //英雄名字    private int age; //年龄    private Weapon weapon; //武器  类作为成员变量类型
        public Hero() {    }
        public Hero(String name, int age, Weapon weapon) {        this.name = name;        this.age = age;        this.weapon = weapon;    }
        public void attack(){        //age 和 name, 可以直接往里面拼,但是weapon是一个对象,它是一个类,需要get它里面的代号(一定要把code拿出来,在往里面拼)        System.out.println("年龄为"+age+"的"+name+"正在用"+weapon.getCode()+"疯狂杀敌,渐渐的杀红眼!!");    }
        public String getName() {        return name;    }
        public void setName(String name) {        this.name = name;    }
        public int getAge() {        return age;    }
        public void setAge(int age) {        this.age = age;    }
        public Weapon getWeapon() {        return weapon;    }
        public void setWeapon(Weapon weapon) {        this.weapon = weapon;    }}
    
    public class 主方法 {    public static void main(String[] args) {        //创建一个英雄角色        Hero hero = new Hero();        //为英雄起一个名字,并且设置年龄        hero.setName("飞飞");        hero.setAge(20);
            //创建一个武器对象        Weapon weapon= new Weapon("七星剑");        //为英雄配备武器        hero.setWeapon(weapon);
            hero.attack(); //调用attack方法
        }}
    执行结果:年龄为20的飞飞正在用七星剑疯狂杀敌,渐渐的杀红眼!!
    

    复制代码

    接口作为成员变量类型

    接口作为方法的参数或返回值

  • 相关阅读:
    随手记面试录
    Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife
    【图灵诸葛】jvm笔记
    [减脂期食谱] 自制千岛酱
    深度学习笔记——神经网络(ANN)搭建过程+python代码
    代码大全阅读随笔(八)
    互换性测量与技术——偏差与公差的计算,公差图的绘制,配合与公差等级的选择方法
    JavaScrip获取视频第一帧作为封面图
    【自然语言处理】NLP入门(五):1、正则表达式与Python中的实现(5):字符串常用方法:对齐方式、大小写转换详解
    如何使用 Node.js和Express搭建服务器?
  • 原文地址:https://blog.csdn.net/m0_73311735/article/details/127586796