内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
/** * 外部类 */ public class Outer { private String param = "outer param"; public void print(){ System.out.println("Outer >> print()"); } public Say sayHello(String s){ /** * 局部内部类:指内部类定义在方法和作用域内。 */ class SayHello implements Say{ private String text; private SayHello(String text){ this.text = text; } @Override public void say() { System.out.println("I say " + this.text); } } return new SayHello(s); } /** * 当所在方法的形参需要被匿名内部类使用时,该形参必须为final。 */ public Say sayHello2(final String s){ //匿名内部类 return new Say() { @Override public void say() { System.out.println("I say " + s + " again"); //匿名内部类方法中访问所在方法的形参 } }; } /** * 成员内部类: * 作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。 * 如果一个内部类只希望被外部类中的方法操作,那么可以使用private声明内部类。 */ public class Inner{ private String param = "inner param"; public void print(){ System.out.println("Outer >> Inner >> print()"); } //在成员内部类方法中引用外部类的属性和方法 public void callOuter(){ System.out.println(Outer.this.param); //在内部类里访问外部类的成员属性 Outer.this.print(); //在内部类里访问外部类的成员方法 } } /** * 嵌套内部类:修饰为static的内部类。嵌套类不能声明为private,一般声明为public,方便调用。 * 使用静态内部类的好处是加强了代码的封装性以及提高了代码的可读性。 */ public static class NestInner{ public static void print(){ System.out.println("Outer >> NestInner >> print"); } } public static void main(String[] args) { //Outer Outer outer = new Outer(); System.out.println(outer.param); outer.print(); Say say = outer.sayHello("love you"); say.say(); outer.sayHello2("love you").say(); //调用嵌套内部类的方法 Outer.NestInner.print(); System.out.println("\n"); //Inner Outer.Inner inner = outer.new Inner(); //实例化成员内部类 System.out.println(inner.param); inner.print(); inner.callOuter(); //NestInner Outer.NestInner nestInner = new Outer.NestInner(); //实例化静态内部类 } }
相关推荐
Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另一个类。这种设计模式提供了更灵活的代码组织方式,同时还可以实现特定的封装和访问控制。内部类主要分为四种类型:静态内部类、成员内部...
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
Java内部类是Java语言提供的一种独特特性,它允许我们在一个类的定义内部定义另一个类。这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"java内部类使用...
Java内部类总结 学习java的资源
从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好就会导致代码像迷宫一样,导致出现毫无重用的综合征。...本文档讲述Java内部类的规则及应用
12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类...
Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...
这里是自己对java内部类整理的一篇文章,有可执行的源代码
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
谈Java内部类的四个应用场景
Java 内部类总结 Java 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而外部类只能使用 public 和缺省的包...
Java 的使用 分别介绍了 成员内部类、方法内部类、静态内部类
Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类
Java内部类详解 Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法...
Java 内部类是 Java 语言的一个重要特性,允许在一个类的定义内嵌套其他类。这使得 Java 能够实现一些特殊的编程模式,比如模拟多重继承和解决多次实现问题。内部类根据其定义的位置和用途,可以分为四种类型:成员...
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以作为外部类的成员,具有访问外部类的所有域的权限,无论是public、protected还是private。这种访问能力使得内部类能...
Java内部类是Java编程语言中的一个特色特性,它允许在一个类的定义内部定义另一个类。这种设计模式在处理一些特定的复杂情况时非常有用,比如实现事件监听、封装临时对象或者创建私有辅助类等。以下是对Java内部类的...
Java 内部类总结 Java 内部类是 Java 语言的一个重要概念,指的是在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而...
Java内部类是Java语言提供的一种独特机制,允许一个类(内部类)嵌套在另一个类(外部类)中。这打破了传统的类与类之间完全独立的关系,使得内部类可以访问外部类的所有成员,包括私有(private)成员,而外部类...
详细介绍JAVA内部类的用法,用途,基本语法,及匿名类用法