【JAVA进阶篇】内部类的详细介绍

2年前 (2022) 程序员胖胖胖虎阿
187 0 0

Java学习

  • 内部类
    • 概念
    • 分类
    • 成员内部类的定义
    • 成员内部类的使用
    • 内部类的同名变量访问
    • 局部内部类的定义与使用
    • 局部内部类的final问题
    • 匿名内部类
    • 匿名内部类注意事项
    • 类作为成员变量类型
    • 接口作为成员变量类型
    • 接口作为方法的参数或返回值

内部类

概念

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

分类

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

成员内部类的定义

成员内部类定义格式:

修饰符 class 外部类名称{
	修饰符 class 内部类名称{
		//...
	}
	//...
}

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

举例配合理解:
【JAVA进阶篇】内部类的详细介绍

成员内部类的使用

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

举例配合理解:
【JAVA进阶篇】内部类的详细介绍
【JAVA进阶篇】内部类的详细介绍

内部类的同名变量访问

【JAVA进阶篇】内部类的详细介绍
【JAVA进阶篇】内部类的详细介绍

局部内部类的定义与使用

【JAVA进阶篇】内部类的详细介绍
举例配合理解:
【JAVA进阶篇】内部类的详细介绍
【JAVA进阶篇】内部类的详细介绍

局部内部类的final问题

【JAVA进阶篇】内部类的详细介绍

匿名内部类

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

匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法};

小细节:注意大括号后面要有分号,不要忘记。

举例配合理解:
【JAVA进阶篇】内部类的详细介绍

匿名内部类注意事项

【JAVA进阶篇】内部类的详细介绍

学习匿名内部类主要是让大家以后在阅读别人代码的时候,能够理解。并不代表以后都要这样写。因为匿名内部类有两个缺点:
缺点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的飞飞正在用七星剑疯狂杀敌,渐渐的杀红眼!!

接口作为成员变量类型

【JAVA进阶篇】内部类的详细介绍
【JAVA进阶篇】内部类的详细介绍

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

【JAVA进阶篇】内部类的详细介绍

版权声明:程序员胖胖胖虎阿 发表于 2022年9月14日 下午8:56。
转载请注明:【JAVA进阶篇】内部类的详细介绍 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...