From: http://www.itzhai.com/java-based-notebook-a-static-inner-class-within-a-class-member-within-the-class-of-local-inner-classes-anonymous-inner-classes.html

内部类:

使用内部类减少了命名冲突。

一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。
内部类分为四种:
静态内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)

1、静态内部类(static inner classes)

最简单的内部类。

只能访问外部类的静态成员变量与静态方法。

生成静态内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

1.1、相关使用例子:

静态内部类:

 class StaticInner{
private static int a = 1; /**
   * 静态内部类
  * 生成的类名:StaticInner$InnerClass
  */
public static class InnerClass{
//静态内部类可以声明静态的成员变量,其他的内部类不可以
private static int b = 1;
public void execute(){
//静态内部类只能访问静态程序
System.out.println(a + b);
}
}
}

main方法中使用:

 public static void main(String[] args) {
//创建静态内部类
StaticInner.InnerClass innerClass = new StaticInner.InnerClass();
innerClass.execute();
}

2、成员内部类(member inner classes):

成员内部类可以访问外部类的静态与非静态的方法和成员变量。

生成成员内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass().new InnerClass();

在局部内部类中访问外部类的成员变量的方法:

OuterClass.this.a;

2.1、相关使用例子:

成员内部类:

 class MemberInner{
private int a = 1; public void execute(){
//在外部类中创建成员内部类
InnerClass innerClass = this.new InnerClass();
} /**
* 成员内部类
*/
public class InnerClass{ //内部类可以创建与外部类同名的成员变量
private int a = 2; public void execute(){
//this引用的是内部类
System.out.println(this.a);
//在内部了中使用外部类的成员变量的方法
System.out.println(MemberInner.this.a);
}
}
}

在main方法中使用:

 public static void main(String[] args) {
//创建成员内部类
MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();
innerClass.execute();
}

3、局部内部类(local inner classes):

类似于局部变量,不能定义为public,protected,private或者static类型。

定义方法中,只能方法中声明为final类型的变量。

3.1、相关使用例子:

局部内部类:

 class LocalInner{

     public void execute(){
final int a = 1;
/**
* 创建局部内部类
*/
class InnerClass{
public void execute(){
System.out.println("LocalInner Class"); //局部内部类只能访问final类型的变量
System.out.println(a);
}
}
//只能在所在方法区域创建
new InnerClass().execute();
}
}

在main方法中使用:

 public static void main(String[] args) {
//外部不能直接创建局部内部类
LocalInner localInner = new LocalInner();
localInner.execute();
}

4、匿名内部类(anonymous inner classes):

匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。

匿名内部类会隐式地继承一个父类或实现一个接口。

4.1、相关使用例子:

 public static void main(String[] args) {
AnonymousInnerClassTest test = new AnonymousInnerClassTest(); /**
* 创建匿名内部类
* 生成的类名:AnonymousInnerClassTest$1
*/
test.print(new Date(){
//重写toString()方法
@Override
public String toString() {
return "Hello world.";
}
}); JButton button = new JButton(); /**
* 创建匿名内部类
* 该匿名内部类实现ActionListener接口
* 生成的类名:AnonymousInnerClassTest$1
*/
button.addActionListener(new ActionListener(){
//实现接口中的方法
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("使用匿名内部类实现ActionListener接口");
}
});
} public void print(Date date){
System.out.println(date);
}

Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)的更多相关文章

  1. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  2. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  3. Java基础语法09-面向对象下-内部类

    九.内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类. (1)成员内部类:声明在外部类中方法外 静态成员内部类 非静态成员内部类 (2)局部内部类:声明在外部类的方法 ...

  4. “全栈2019”Java第九十九章:局部内部类与继承详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第九十四章:局部内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. Java内部类(3):局部内部类

    有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成 ...

  7. Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类

    笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...

  8. java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

    提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定 ...

  9. java基础第九篇之final和内部类等

    final关键字:final:最终,终极 final:作用:修饰类,变量,方法.成员变量的访问 1.final修饰变量: final修饰局部变量: 把这个局部变量 变成一个厂里,这个厂里只能被赋值一次 ...

随机推荐

  1. JDK各版本新特性!

    1.JDK1.5 新特性 1.自动装箱与拆箱:自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类型的包装中.自动拆箱的过程:每当需要一个值时,被装箱对象中的值就被自动地提取 ...

  2. Insert Interval

    在已经排好序的区间中,插入一个新的区间,与merge的做法类似 Given a set of non-overlapping intervals, insert a new interval into ...

  3. Python::OS 模块 -- 简介

    OS 模块简介 OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能.使用OS模块中提供的接口,可以实现跨平台访问.但是在OS模块中的接口并 ...

  4. super.onCreate(SavedInstanceState);

    super.onCreate(SavedInatanceState)时调用父类的构造方法,SavedInstanceState是保存当前Activity的状态信息. onCreate方法的参数是Bun ...

  5. 导航代码position:relative

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  6. oracle审计详解-转

    http://blog.chinaunix.net/u2/66903/showart_2082884.htmlOracle使用大量不同的审计方法来监控使用何种权限,以及访问哪些对象.审计不会防止使用这 ...

  7. 士兵站队问题sol

    作者:http://www.cnblogs.com/taoziwel/articles/1859577.html 相类似题目:输油管道问题 [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网 ...

  8. 12 factor 目录

    I. 基准代码 一份基准代码,多份部署 II. 依赖 显式声明依赖关系 III. 配置 在环境中存储配置 IV. 后端服务 把后端服务当作附加资源 V. 构建,发布,运行 严格分离构建和运行 VI. ...

  9. each循环

    var NA_COUNT=0; var NG_OK_COUNT=0; //获取所有检验明细为同一个编号的下拉选项,看有没有不是N/A的下拉选项 $("#@(Perfix)tbData sel ...

  10. libcurl发起post请求时间延迟问题。except为空即可

    最近在做团购酒店APP分享到qzone功能,使用libcurl访问qzone的分享cgi接口,酒店分享信息以POST方式传输,在测试的时候发现分享接口平均有2s的延迟,这延迟也太大了吧,于是乎问了空间 ...