内部类分为普通内部类(有名)和匿名内部类。普通内部类分为成员内部类、局部内部类、静态内部类(嵌套内部类)。顾名思义,内部类就是定义在一个类内部的类。什么时候都会使用内部类呢?当我们定义一个类,发现内部还有类时,比如我们定义人体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基础---------内部类与匿名内部类的更多相关文章

  1. 第30节:Java基础-内部类

    内部类 // 外部类 class Demo{ private int num = 3; // 定义内部类 class Int{ void show(){ System.out.println(&quo ...

  2. Java 基础 内部类

    Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...

  3. Java基础-内部类

    在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...

  4. JAVA基础——内部类详解

    JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...

  5. Java基础内部类、包的声名、访问修饰符、代码块整理

    内部类 14.1内部类概念 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类.其他类也称为外部类. 内部类分为成员内部类与局部内部类. 我们定义内部类时,就 ...

  6. Java基础—内部类(转载)

    转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...

  7. Java基础——内部类

    一.什么是内部类 将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类 内部类所在的类在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$In ...

  8. Java基础—内部类

    在Java语言中,可以把一个类定义到另一个类的内部,在类里面的这个类就叫作内部类,外面的类叫作外部类.在这种情况下,这个内部类可以被看成外部类的是一个成员(与类的属性和方法类似).还有一种类被称为顶层 ...

  9. java基础 内部类详解

    什么是内部类? 1.内部类也是一个类: 2.内部类位于其他类声明内部. 内部类的常见类型 1.成员内部类 2.局部内部类 3.匿名内部类 4.静态内部类 简单示例 /** * 外部类 * */ pub ...

随机推荐

  1. DES根据键值加密解密

    import java.io.IOException; import java.net.URLEncoder; import java.security.SecureRandom; import ja ...

  2. Eclipse中添加PyDev插件

    思路 1.启动Eclipse, 2.点击Help->Install New Software... 3.在弹出的对话框中,点Add 按钮. 4.Name中填:Pydev, Location中填h ...

  3. bzoj1857: [Scoi2010]传送带--三分套三分

    三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...

  4. Ajax Post 与 Get 实例

    Ajax的POST实例,index.html <html> <head> <script type="text/javascript"> fun ...

  5. java中的反射

    1.何为java反射机制: 在运行过程中,对于任意一个类都能够知道这个类的属性和方法:对于任意一个对象都能调用其属性和方法:这种动态获取信息和动态调用方法 就称为java反射 2.获取Class对象的 ...

  6. 管闲事的小明-nyoj51

    描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵 ...

  7. ss与udp转发的释疑

    转载: http://shadowsocks.info/shadowsocks-udp/ VPS购买地址 udp是什么:UDP 是User Datagram Protocol的简称, 中文名是用户数据 ...

  8. Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...

  9. spring与redis简单整合

    项目结构 整合需要的依赖 <dependencies> <dependency> <groupId>org.springframework</groupId& ...

  10. iOS应用架构谈 view层的组织和调用方案

    当我们开始设计View层的架构时,往往是这个App还没有开始开发,或者这个App已经发过几个版本了,然后此时需要做非常彻底的重构. 一般也就是这两种时机会去做View层架构,基于这个时机的特殊性,我们 ...