1. 1、认识匿名内部类
  2.  
  3. /*
  4. 匿名内部类
  5. 就是内部类的简化写法。
  6.  
  7. 前提:存在一个类或者接口
  8. 这里的类可以是具体类也可以是抽象类。
  9.  
  10. 匿名内部类的格式:
  11. new 类名或者接口名(){
  12. 重写方法;
  13. };这代表的是一个子类对象
  14.  
  15. 本质是什么呢?
  16. 是一个继承了该类或者实现了该接口的子类匿名对象。
  17. */
  18. interface Inter {
  19. public abstract void show();
  20. public abstract void show2();
  21. }
  22.  
  23. class Outer {
  24. public void method() {
  25. //接口里面只有一个方法的时候,只有show()
  26. /*
  27. new Inter() {
  28. public void show() {//在匿名内部类里面重写接口或者抽象类的方法。
  29. System.out.println("show");
  30. }
  31. }.show();
  32. */
  33.  
  34. //二个方法的时候
  35. /*
  36. new Inter() {
  37. public void show() {
  38. System.out.println("show");
  39. }
  40.  
  41. public void show2() {
  42. System.out.println("show2");
  43. }
  44. }.show();
  45.  
  46. new Inter() {
  47. public void show() {
  48. System.out.println("show");
  49. }
  50.  
  51. public void show2() {
  52. System.out.println("show2");
  53. }
  54. }.show2();
  55. */
  56.  
  57. //如果很多个方法,就很麻烦了.所以选择使用参数接收这个对象,然后使用对象调用方法就可以了。
  58. Inter i = new Inter() { //接口的实现子类的对象给接口,多态
  59. public void show() {
  60. System.out.println("show");
  61. }
  62.  
  63. public void show2() {
  64. System.out.println("show2");
  65. }
  66. };//注意这里的分号
  67.  
  68. i.show();
  69. i.show2();
  70. }
  71. }
  72.  
  73. class InnerClassDemo6 {
  74. public static void main(String[] args) {
  75. Outer o = new Outer();
  76. o.method();
  77. }
  78. }
  79.  
  80. 2、匿名内部类在开发中的使用
  81.  
  82. 通过一个案例简单演示:
  83.  
  84. interface Person {
  85.     public abstract void study();
  86. }
  87.  
  88. class PersonDemo {
  89.     public void method(Person p) {//这种方式,在前面介绍参数类型是引用类型的时候已经介绍过了。
  90. //见博客(http://blog.csdn.net/qq_32059827/article/details/51344046)
  91.         p.study();
  92.     }
  93. }
  94.  
  95. //实现类
  96. class Student implements Person {
  97.     public void study() {
  98.         System.out.println("好好学习,天天向上");
  99.     }
  100. }
  101.  
  102. class InnerClassTest2 {
  103.     public static void main(String[] args) {
  104.         //测试
  105.         PersonDemo pd = new PersonDemo();
  106.         Person p = new Student();
  107.         pd.method(p);
  108.         System.out.println("--------------------");
  109.         
  110.         //匿名内部类在开发中的使用
  111.        //结果和上面一模一样,使用匿名内部类的方式,可以节省内存空间。使用场景,方法比较少的时候使用。
  112.         pd.method(new Person(){
  113.             public void study() {
  114.                 System.out.println("好好学习,天天向上");
  115.             }
  116.         });
  117.     }
  118. }

《java入门第一季》之面向对象(匿名内部类)的更多相关文章

  1. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  2. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  3. 《java入门第一季》之面向对象(谈谈接口)

    软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...

  4. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  5. 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)

    根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...

  6. 《java入门第一季》之面向对象匿名内部类面试题

    面试题一: /*         按照要求,补齐代码             interface Inter { void show(); }             class Outer { // ...

  7. 《java入门第一季》之面向对象(包概述)

    由于eclipse等ide的强大功能,使得建包,导包用一些快捷键就能完成.这里对包的概念做稍微的叙述,了解即可: 分包后使得项目更加清晰,提高代码维护性. 包:         A:其实就是文件夹   ...

  8. 《java入门第一季》之面向对象(this和super详细分析)

    此文章来自于书籍,里面介绍了this和super详细的区别.当然在后边的文章中还有涉及super的时候还会分析. Java关键字this.super使用总结 一.this Java关键字this只能用 ...

  9. 《java入门第一季》之面向对象(面向对象案例详解)

    通过几个小案例理重新回顾一下前面所写的内容,对面向对象的理解更加深刻的目的: 案例一: /* 需求: 定义一个员工类,自己分析出几个成员, 然后给出成员变量,构造方法,getXxx()/setXxx( ...

随机推荐

  1. springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)

    HandlerMethodArgumentResolver是用来为处理器解析参数的,主要用在HandlerMethod中,每个Resolver对应一种类型的参数,其实现类特别的多. HandlerMe ...

  2. R语言:安装及使用

    http://blog.csdn.net/pipisorry/article/details/53640638 ubuntu下安装 sudo apt-get install -y r-base源码安装 ...

  3. Android中Sqlite数据库进行增删改查

    今天这篇文章写Sqlite数据库,通过一个小案例来完整讲一下数据库常见的CRUD操作. 先对知识点总结: SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHel ...

  4. Android 多窗口详解

    多窗口支持 Android N 添加了对同时显示多个应用窗口的支持. 在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示. 在电视设备上,应用可以使用"画中 ...

  5. TextView的升级版———AutoCompleteTextView

    TextView的升级版---AutoCompleteTextView AutoCompleteTextView顾名知义,可以自动提示的TextView,还可以提示错误信息. 这里介绍基本的使用,能够 ...

  6. 为什么选择C++

    为什么选择C++,怎么不选其它语言呢? 为什么不选择C? 因为C++比C简单点~ 为什么不选择C#? 因为C++可以在所有操作系统上使用. 为什么不选择JAVA? 因为C++的性能好一点~ 还有其他的 ...

  7. [error]configure: error: You need a C++ compiler for C++ support.

    安装pcre包的时候提示缺少c++编译器 解决办法 使用yum安装 yum -y install gcc-c++ 本文出自 "orangleliu笔记本"博客,转载请务必保留此出处 ...

  8. Mysql创建、删除用户、用户管理等相关:转载http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html

    MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...

  9. SQLite 创建表(http://www.w3cschool.cc/sqlite/sqlite-create-table.html)

    SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...

  10. JAVA面向对象-----内部类的概述

    JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...