1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象。
前提:
     内部类必须继承或实现外部类或接口。

格式:
    new 父类&接口(){};
    其实就是一个子类对象,用{};结束

匿名内部类在程序中的体现形式有三种:
 1.父类为普通的类

class Inter{

}

class OuterTest{

    public static void function(){

        new Inter(){

            private int num = 9;
void show(){
System.out.println("这是Inter子类的成员变量num="+num);
}
}.show();
/*
若改以上代码为:编译时就会报错了,因为编译时检查左边类型Inter类中并没有show()方法
Inter in = new Inter(){};
in.show();
*/
}
} class MyOuterDemo
{
public static void main(String[] args)
{
OuterTest.function();
}
}

2.父类为抽象类(子类中一定要覆盖抽象方法)

 2.父类为抽象类(子类中一定要覆盖抽象方法)
abstract class Test{ abstract void show();
} class Outer{
int x = 8; /* 这是匿名内部类的完整形式
class Inter extends Test{ void show(){
System.out.println(x);
}
}
*/ public void method(){ //new Inter().show(); Test t = new Test(){ void show(){
System.out.println("x="+x);
System.out.println("这是覆盖Test抽象类中的方法,因为子类继承它就必须覆盖");
} void show1(){
System.out.println("这是Test子类自己的方法");
} };
t.show();
//t.show1();运行这个里会报错,因为Test抽象类中并没有show1()方法 }
} class OuterInterDemo
{
public static void main(String[] args)
{
new Outer().method(); }
}

3.父类为接口interface

interface Inter{
void show();
} class Outer{ static Inter method(){ return new Inter(){ public void show(){
System.out.println("show run");
}
}; }
} class OuterTest1
{
public static void main(String[] args)
{
Outer.method().show();
/*
上面一句,相当于:
Inter in = Outer。method();
in.show();
*/
}
}

什么时候使用匿名内部类?
   当函数的参数是一个接口类型时,该接口中的方法不超过3个的时候(因为方法过多时,产生匿名内部类的方法就变得太臃肿了),为了简化代码,将匿名内部类作为参数进行传递。

java学习笔记day06---匿名内部类的更多相关文章

  1. 2)Java学习笔记:匿名内部类

    为什么要使用匿名内部类 ①如果以前的类有一些缺陷,只是想在某一个模块进行修复,可以在引用该类的地方使用匿名内部类,在overRide方法进行修复. ②如果一个类,需要派生出很多类,而且这些类大多只是在 ...

  2. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  6. Java学习笔记之---内部类

    Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...

  7. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  10. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

随机推荐

  1. [Cycle.js] Hyperscript as our alternative to template languages

    Usually we use template languages like Handlebars, JSX, and Jade to create. One simple way we can cr ...

  2. SQL:define和verify命令及替换变量&

    =================替换变量&===============使用一个&符号来指定一个变量值,执行SQL语句时,会提示用户输入一个数值. SQL> select sa ...

  3. python -序列化

    python中用于序列化的两个模块 json 用于[字符串]和[python基本数据类型]之间进行转换 pickle 用于[python特有的类型] 和 [python基本数据类型]间进行转换 Jso ...

  4. RequireJs 深入理解

    原文   http://www.tuicool.com/articles/jam2Anv RequireJs已经流行很久了,我们在项目中也打算使用它.它提供了以下功能: 声明不同js文件之间的依赖 可 ...

  5. git 分支的基本操作

    git分支的基本操作. 创建私有分支:     $git branch branchName commitID     $git checkout -b branchName commitID 注意: ...

  6. Web系统如何做到读取客户电脑MAC等硬件信息且兼容非IE浏览器

    我们在实际Web应用中,可能会遇到“需要限定特定的电脑或用户才能使用系统”的问题. 对于一般情况来说,我们用得最多的可能是使用ActiveX控件的方法来实现,但此方案只适用于IE浏览器.为了能兼容不同 ...

  7. 我的第一个MVC项目

    这是本人第一个完全按照MVC开发模式完成的项目,非常简陋,仅仅完成的查询,保存,删除基本功能,而且存在编码问题没有解决,以后会慢慢增加功能.慢慢改进 package com.sdjt.dao; imp ...

  8. 豆瓣FM duilib版

    最近duilib项目被复制到了github上,仿佛又多了些活力.想要总结以前的项目的同时因为很喜欢豆瓣的FM,所以打算做个duilib版本豆瓣FM. 在网上了看到了很多豆瓣的不同版本,node.js. ...

  9. 用GDAL/OGR去读shapefile

    一.读shapefile 1.首先,用Arcgis创建所要读的shp文件.打开ArcCatalog,右键NEW->Shapefile,名称Name:point ,要素类型(Feature Typ ...

  10. 1009 Enigma

    本题的重点是理解清楚题意并能代码模拟.形式是二战德国密码机,和数据结构.算法联系较少. #include <stdio.h> #include <string.h> int m ...