`

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 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

    Java 匿名内部类

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义单独类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的需求。在Java编程中,匿名内部类主要用于事件处理、回调...

    16.java匿名内部类.zip

    16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名内部类.zip16.java匿名...

    浅析Java匿名内部类创建登录界面.pdf

    Java匿名内部类在创建登录界面中的应用主要体现在事件监听机制和界面组件的设置上。本文将详细阐述如何利用这些技术构建一个登录窗口。 首先,Java Swing库提供了丰富的组件用于创建图形用户界面(GUI)。在创建...

    使用Java匿名内部类实现一个简单的线程池.txt

    ### 使用Java匿名内部类实现一个简单的线程池 #### 一、引言 在现代软件开发中,线程池是管理并发任务的重要工具之一。它能够有效地控制运行中的线程数量,合理分配系统资源,避免频繁创建销毁线程带来的性能开销...

    Java匿名内部类的写法示例

    Java匿名内部类是一种特殊的内部类,它没有名称且可以直接实现接口或继承类。这种特性使得匿名内部类在Java编程中非常灵活,常用于简洁地处理一次性或者临时性的代码实现。在本文中,我们将深入探讨Java匿名内部类的...

    JAVA_匿名内部类

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义完整类的情况下创建对象。这种类没有名字,通常用作一次性实现某个接口或继承某个类的情况,尤其是在需要简洁代码的地方。以下是对Java匿名内部...

    Swift匿名内部类像java那样的功能改.zip

    使用swift匿名内部类,实现jave匿名内部类功能,java中的匿名内部类,可以做到的是,就是想要重写一个类中的方法,并且执行,但是不想重新定义一个类,因为只调用一次,或者调用多次,但是每次调用的实现过程都不同,这时候就...

    Java匿名内部类原理与用法详解

    Java匿名内部类原理与用法详解 Java匿名内部类是一种特殊的内部类,它没有明确的类名,并且只能被使用一次。匿名内部类可以继承一个父类或实现一个接口,但是不能继承多个父类或实现多个接口。匿名内部类不能是抽象...

    java中的匿名内部类总结

    Java 中的匿名内部类总结 Java 中的匿名内部类是一种特殊的内部类,它没有名字,因此也称为匿名类。匿名内部类是一种简洁的编程方式,能够简化代码编写,但它也有一些限制和特点。 匿名内部类的定义 匿名内部类是...

    老生常谈 java匿名内部类

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不定义单独类的情况下创建类的实例。这种类型的内部类通常用于简化代码,尤其是在处理回调、事件监听或需要快速实现一个接口的情况。下面我们将详细...

    java匿名内部类实例代码详解

    "java匿名内部类实例代码详解" Java匿名内部类是一种特殊的内部类,它没有类名,不能显示的调用new方法来创建对象。匿名内部类通常用来实现某些特殊的功能,例如在事件处理中,经常使用匿名内部类来实现事件处理器...

    Java4Android 35_内部类和匿名内部类

    在Java编程语言中,内部类和匿名内部类是两种特殊类型的类,它们为代码的组织和功能实现提供了独特的灵活性。本教程"Java4Android 35_内部类和匿名内部类"深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们...

    Java 匿名内部类详解及实例代码

    Java匿名内部类是一种特殊的类,它没有名称,主要用于简化代码,特别是当类只在一个地方使用时。这种类可以在声明变量的同时被定义,并且可以继承一个类或者实现一个接口。下面我们将详细探讨Java匿名内部类的概念、...

    java匿名内部类实例简析

    Java匿名内部类是一种特殊的类,它没有被赋予一个独立的名称,而是直接在使用时定义。这种类通常用于快速实现某个功能,特别是当只需要用一次的情况。匿名内部类可以是类的子类(继承)或者实现一个接口。下面将详细...

    java 内部类使用(内部匿名类)

    内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及方法参数内部类。 1. **成员内部类**:成员内部类就像是外部类的一个普通成员,可以是静态或非静态的。非静态内部类拥有对外部类的引用,可以直接...

    java匿名内部类笔试题-100ask:韦东山视频学习笔记

    java匿名内部类笔试题

    java中匿名内部类详解

    Java中的匿名内部类是一种特殊的类,它没有名称且通常用于一次性使用的情况,目的是简化代码编写。下面我们将深入探讨匿名内部类的各个方面。 1. **匿名内部类定义**: 匿名内部类,正如其名,是没有名字的类。它...

    170331-01.匿名内部类总结.java

    170331-01.匿名内部类总结.java 170331-01.匿名内部类总结.java 匿名 内部类 总结 java

    Android开发匿名内部类

    在Java编程语言中,匿名内部类是一种特殊的类,它没有名字,通常用于简化代码和实现特定功能,如事件处理或接口快速实现。在Android开发中,匿名内部类的应用尤其广泛,因为Android框架中的许多组件(如按钮、文本...

Global site tag (gtag.js) - Google Analytics