irpas技术客

【JAVA进阶篇】内部类的详细介绍_几分醉意.

irpas 7187

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

内部类 概念

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

分类

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的飞飞正在用七星剑疯狂杀敌,渐渐的杀红眼!! 接口作为成员变量类型

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #JAVA进阶篇内部类的详细介绍 #例如身体和心脏的关系 #又如汽车和发动机的关系