Java——3.面向对象:12.内部类

1.类的五大成员

2.内部类

2.1定义

2.2特点

  1. 内部类可直接访问外部类的成员,包括私有
Engine中的show方法可直接使用内部与外部的成员
  1. 外部类要访问内部类的成员,必须创建对象
需创建对象才可使用内部类成员

2.3分类

成员内部类
静态内部类
局部内部类
匿名内部类(重要

3.成员内部类

3.1定义

3.2获取内部类对象

3.2.1.直接创建:内部类不用private修饰时

类型:Outer.Inner 外部类对象调用内部类对象
注意:若内部类用private修饰,则需间接创建

3.2.2.间接创建:

在外部类中编写方法,对外提供内部类
3.2.2.1内部类用private修饰
Test中:
Outer o=new Outer(); 
Object i=o.getInstance();//多态接收
  1. 用多态接收,不能写Outer.Inner i=o.getInstance()
  2. 因为外部识别不到私有化的Inner
3.2.2.2内部类不用private修饰
直接调用返回的方法Outer.Inner i=o.getInstance()

3.3内存分析

  1. 外部类和内部类是两个不同的空间,但内部类有着外部类的地址
  2. a是局部,this.a是本类开始,Outer.this.a是外部类

4.静态内部类

4.1定义

4.2.e.g.

静态内部类中,
  1. 可直接访问外部类的静态变量和静态方法(b)
  2. 而非静态的需要创建外部类对象(a)
show1是非静态方法,show2是静态方法

4.3.静态内部类中的方法调用

4.3.1非静态方法(无static)

需创建静态内部类对象

4.3.2静态方法(static)

直接调用

5.局部内部类(淘汰)

6.匿名内部类(重要)

6.1定义

隐藏了名字的内部类

6.2解释

  1. {}内实际上是一个隐去名字的类
  2. 这个无名类实现了Swim接口/继承了Swim类,并重写了方法
  3. new Swim()创建了一个无名对象

6.3应用:不用创建太多的类

Animal类中
class Animal{ String name; ............ public void eat(){ Sysout("吃") } }
Test中
  1. method方法以对象作为形参,调用eat()方法
  2. 直接在method()中填入一个匿名内部类<继承于Animal>,同时重写了自己的eat()方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值