十一、Java基础---------内部类与匿名内部类
内部类分为普通内部类(有名)和匿名内部类。普通内部类分为成员内部类、局部内部类、静态内部类(嵌套内部类)。顾名思义,内部类就是定义在一个类内部的类。什么时候都会使用内部类呢?当我们定义一个类,发现内部还有类时,比如我们定义人体body时,内部还有心、肝、皮、肺、肾,他们既属于body,又是一个独立的器官,这是为了更加方便的描述人体就会选择内部类来实现。
普通内部类
1、定义
讲一个类定义在另一个类的里面,对里面那个类就叫做内部类,或者嵌套类。
2、成员内部类
2.1形式:
class Outer{
class Inner
void function()
{}
}
2.2 访问规则
#.内部类可以直接访问外部类中的成员,包括私有。是因为内部类中持有了一个外部类的引用。
格式:外部类名.this
#.外部类要访问内部类,必须要建立内部类的对象。
#.内部类作为外部类的成员,可以使用类成员的修饰符来修饰,比如private,static(变为静态内部类)
2.3 访问格式
当内部类定义在外部类的成员位置上而且非私有且非静态时可以在其他类中直接建立内部类对象访问内部类的成员。比如访问2.1中的function方法可以通过:
访问格式 :外部类名 . 内部类名 变量名 = 外部类对象 . 内部类对象 。
代码示范 :Out . Innter in = new Out() . new Inner();
in . function();
3、局部内部类
局部内部类,是指内部类定义在方法和作用域内。
3.1 形式:
#定义在方法中
class Outer{
public void run()
{
class Inner{
void function()
{}
}
}
}
#定义在作用域中
class Outer{
int b=0;
public void run()
{
final int a=1;
if(true)
{
class Inner{
void function()
{
System.out.println(a+":"+b);
}
}
}
}
}
3.2 访问规则
1.不可以被成员修饰符修饰
2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
4、静态内部类
静态内部类就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。
4.1 形式
class Outer{
static class Inner{
void function(){}
}
}
4.2 访问格式
访问格式: 外部类名 . 内部类名 . 方法名();
代码演示:outer.inner.function();
4.3 注意事项
# 内部类中定义了静态成员,该内部类也必须是静态内部类
# 当外部类中的静态方法访问内部类时,内部类也必须是静态内部类,换句话说就是,外部类中静态方法不能访问非静态的内部类。
匿名内部类
1、概念
当我们使用内部类时如果只使用一次,那么首选使用匿名内部类,因为它没有名字,可以简化书写。匿名内部类其实就是内部类。
2、前提 匿名内部类必须继承一个类或者实现一个接口
3、匿名内部类的格式:
new 父类或者接口() {定义子类的内容};
4、 形式
//内部类的父类或者接口
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
public void function()
{
new AbsDemo()//new 父类或者接口,表示建立父类子类对象或者接口实现类对象
{
void show(){}
}.show();
}
}
、注意事项
# 匿名内部类是不能加访问修饰符的。要注意的是,new 匿名类,这个类是要先定义的
# 当所在的方法的形参需要被内部类里面使用时,该形参必须为final
# 其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。
# 匿名内部类中定义的方法最好不要超过3个
十一、Java基础---------内部类与匿名内部类的更多相关文章
- 第30节:Java基础-内部类
内部类 // 外部类 class Demo{ private int num = 3; // 定义内部类 class Int{ void show(){ System.out.println(&quo ...
- Java 基础 内部类
Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...
- Java基础-内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...
- JAVA基础——内部类详解
JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...
- Java基础内部类、包的声名、访问修饰符、代码块整理
内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...
- Java基础—内部类(转载)
转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...
- Java基础——内部类
一.什么是内部类 将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类 内部类所在的类在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$In ...
- Java基础—内部类
在Java语言中,可以把一个类定义到另一个类的内部,在类里面的这个类就叫作内部类,外面的类叫作外部类.在这种情况下,这个内部类可以被看成外部类的是一个成员(与类的属性和方法类似).还有一种类被称为顶层 ...
- java基础 内部类详解
什么是内部类? 1.内部类也是一个类: 2.内部类位于其他类声明内部. 内部类的常见类型 1.成员内部类 2.局部内部类 3.匿名内部类 4.静态内部类 简单示例 /** * 外部类 * */ pub ...
随机推荐
- C#项目打开/保存文件夹/指定类型文件,获取路径
C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325 ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- android-BaseAdapter自定义控件深刻理解
一.自定义控件的实现 自定义控件需要继承BaseAdapter抽象类,该类实现了ListAdapter, SpinnerAdapter两个接口,这两个接口继承了Adapter接口类,没错.是继承Ada ...
- Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- sbt Getting org.scala-sbt sbt 0.13.12 ...
本地仓库被我搞乱了,一气之下整个删掉了本地仓库,再重启sbt卡在Getting这一步. Getting org.scala-sbt sbt 0.13.12 ... 卡住 补充sbt配置文件: 文件结构 ...
- Exception在方法继承中的限制
问题: 父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常: 首先定义异常和父类: class Exception1 extends Exception {} cla ...
- Ceph与OpenStack的Glance相结合
http://docs.ceph.com/docs/master/rbd/rbd-openstack/?highlight=nova#kilo 在Ceoh的admin-node上进行如下操作: 1. ...
- Windows2003中IIS的安全设置技巧
在Windows Server 2003中对于IIS的安全设置具有十分重要的意义,所以掌握IIS安全设置的六大技巧是一个网管员必备的基本技能.下面就是对IIS的安全设置的六大技巧. 技巧1.安装系统补 ...
- Java中的virtual method
今天看jcvm的标准的 时候,看到有一个virtual method,感觉很疑惑,以前看Java的时候并没有发现有这类方法. 百度.Google了一下,才发现,Java中普通方法就是virtual m ...
- [troubleshoot][archlinux][X] GPU HANG
前言:如下内容已经是在hang完大概半个多月后了,当时想写,一直没过来写,写blog果然也是已经花费时间的事情. 最近一直在休假,电脑的使用频率也不多.后来还是为了生活,不情愿的去开始上班了,上班的第 ...