当前位置:首页 > 开发 > 编程语言 > Java > 正文

java 匿名内部类

发表于: 2015-07-14   作者:BlueSkator   来源:转载   浏览:
摘要: 组合优先于继承 Java的匿名类,就是提供了一个快捷方便的手段,令继承关系可以方便地变成组合关系 继承只有一个时候才能用,当你要求子类的实例可以替代父类实例的位置时才可以用继承。   在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相

组合优先于继承

Java的匿名类,就是提供了一个快捷方便的手段,令继承关系可以方便地变成组合关系

继承只有一个时候才能用,当你要求子类的实例可以替代父类实例的位置时才可以用继承。

 

在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。

内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类而心脏又在人体当中,正如同是内部类在外部内当中.

内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。

每个内部类都能独立地继承自一个(接口的)实现,所以,无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

如果没有内部类提供的、可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

如果不需要解决“多重继承”的问题,那么自然可以用别的方式编码,而不需要使用内部类。但如果使用内部类,还可以获得其他一些特性:

  1. 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立(外围类对象的信息只有一份,不会因为内部类的数量的增多而增多)
  2. 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。
  3. 创建内部类对象的时刻并不依赖于外围类对象的创建(注意:主语是“创建内部类对象的时刻”)
  4. 内部类并没有令人迷惑的“is-a”关系;它就是一个独立的实体

成员内部类

成员内部类也是最普通的内部类,它是外围类的一个成员,所以他是可以无限制的访问外围类的所有 成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。 在成员内部类中要注意两点,第一:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类 第二:成员内部类中不能存在任何static的变量和方法

 

局部内部类

它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

 

匿名内部类

1、 匿名内部类是没有访问修饰符的。

2、 new 匿名内部类,这个类首先是要存在的。如果我们将那个InnerClass接口注释掉,就会出现编译出错。

3、 注意getInnerClass()方法的形参,第一个形参是用final修饰的,而第二个却没有。同时我们也发现第二个形参在匿名内部类中没有使用过,所以当所在方法的形参需要被匿名内部类使用,那么这个形参就必须为final。

4、 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。

 

静态内部类(嵌套内部类)

关键字static中提到Static可以修饰成员变量、方法、代码块,其他它还可以修饰内部类,使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类。

静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。

没有这个引用就意味着: 1、 它的创建是不需要依赖于外围类的。 2、 它不能使用任何外围类的非static成员变量和方法。

java 匿名内部类

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
(*)内部类:定义在类中的类 1,内部类可以直接访问外部类中的成员,包括私有,内部类成员调用外部
一 内部类 什么就做内部类? 就是在一个类的内部还存在另外一个类,此类即称为内部类. 1、比如我们定
在查看数码相片时,通常会使用一款图片查看软件,该软件应该能遍历文件夹下的所有图片并进行显示。
内部匿名类在一些Java书籍中写得非常抽象,其实这东西,如果单独拿出来讲的话,也确实很难讲得通,
内部类和匿名类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一、内部类 1
.NET:C#的匿名委托 和 Java的匿名局部内部类 目录 背景实验备注 背景返回目录 这几天重温Java,发
匿名内部类真的很神秘的,不过,这种类就喜欢做一些神秘的东西。想想,匿名内部类,根本就没有名,
1、什么是匿名内部类?   定义:匿名内部类就是没有名字的内部类,更准确一点,是匿名的局部内部
1. java中内存的分配 java程序在运行时,内存结构分为:方法区(method),栈内存(stack),堆内存
java的内部类、匿名类本来以为自己用的已经很溜了, 结果, 就在昨天晚上12点来钟发生了重大事故。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号