匿名类的特点有哪些_什么是内部类?什么是引用类型?

今日内容

内部类

引用类型

内部类 以前2个类是独立分开定义的 0488b7c59c7328f9683d868b2c23c79f.png 概述 把类定义在另一个类的内部,该类就被称为内部类。 举例:把类Inner定义在类Outer中,类Inner就被称为内部类。
class Outer {    class Inner {    } }

内部类的访问规则

A:可以直接访问外部类的成员,包括私有 B:外部类要想访问内部类成员,必须创建对象

内部类的分类

A:成员内部类 B:局部内部类 C:静态内部类 D:匿名内部类
(1) 成员内部类
成员内部类——就是位于外部类成员位置的类特点:可以使用外部类中所有的成员变量和成员方法(包括private的)
定义格式:
class 外部类 {     // 成员变量    // 成员方法    class 内部类 {                // 成员变量                // 成员方法    } }
在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car 中包含发动机 类 Engine ,这时, Engine 就可以使用内部类来描述,定义在成员位置。 代码举例:

class Car { //外部类 

            class Engine { //内部类 

            } 

}

成员内部类面试题 请在?地方向上相应代码,以达到输出的内容

d0ac778bbf6c679e791d7cb3e3cde7ee.png

局部内部类:定义在方法中的类。

定义格式:

85dcff20cc76daa9fe80f7f7f15fa269.png

使用方式: 在定义好局部内部类后,直接就创建对象

访问特点: 内部类可以直接访问外部类的成员,包括私有成员。 代码:

5ace260b69bebbbd53eb09adc0486555.png

5211b077ddc6831f09cfb12e20fefc08.png

81e09e6a4c840085bbd7caaee9e5d8c6.png

匿名内部类【重点】

匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名内部类了。 之前我們使用接口时,似乎得做如下几步操作: 1. 定义子类  2. 重写接口中的方法  3. 创建子类对象 4. 调用重写后的方法

40dd52322474d43353558260c2beb4fd.png

我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。 匿名内部类前提 :匿名内部类必须继承一个父类或者实现一个父接口。 匿名内部类格式

new 父类名或者接口名(){

         // 方法重写

         @Override

         public void method() {

                  // 执行语句

         }

};

使用方式以接口为例,匿名内部类的使用,代码如下: 创建匿名内部类,并调用:

a6e8e0b36f0cd34f0c0f63cbe5382721.png

匿名内部类的本质

1. 定义一个没有名字的内部类 

2. 这个类实现了Swim接口 

3. 创建了这个没有名字的类的对象

引用类型用法总结 实际的开发中,引用类型的使用非常重要,也是非常普遍的。我们可以在理解基本类型的使用方式基础上,进一步 去掌握引用类型的使用方式。基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类 型也是可以的。 class作为成员变量 在定义一个类Role(游戏角色)时,代码如下:

class Role {

      int id; // 角色id 

      int blood; // 生命值 

      String name; // 角色名称

}

定义武器类,将增加攻击能力:

class Weapon {

      String name;// 武器名称 

      int hurt;// 伤害值

}

定义穿戴盔甲类,将增加防御能力,也就是提升生命值:

class Armour { 

     String name;// 装备名称

     int protect;// 防御值 

}

定义角色类:

f42d83b74ccef1cf530f79e15d9f7b4a.png

f518fe08b921debfb24cf70c8948aee3.png

测试类:

46b7049e4243becd53b6c1f628957466.png

输出结果:

使用屠龙刀,造成999999点伤害 

穿上麒麟甲 ,生命值增加10000

interface作为方法参数和返回值类型 当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实都是它的 子类对象。

7689c553d576d05c394745287b33c694.png

2678598b1b2eef2939b4a92e589cf393.png

17d9e9e18f283348a4b225ef1a050ecc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值