Java内部类
1.内部类:
我们知道一个文件中只能有一个public类,如果还要定义一个类(包括接口)只能是默认的不能带有修饰符。而内部类则不然,内部类是指在一个类中(外部类)再定义一个类(内部类),内部类这是相当于外部类的一个属性,类似的内部类分为成员内部类,局部内部类,静态内部类,匿名内部类;内部类的定义不像外部类一样必须使用public或这默认的,他的修饰符可以像所有变量一样可以用public,default,protected和private修饰,也可以是静态的。它的命名也不用担心会和外部类产生冲突,可以自己定义。
内部类平时使用的不多,最多的还是用在事件监听的过程中。
2.成员内部类:
在内部类中可以随意的使用外部类的成员方法和成员变量,尽管这些类的成员被修饰为private.
内部类的实例一定要绑定在外部类的实例上,如果从外部类中初始化一个内部类的对象,那么内部类对象就会绑定在外部类的对象上。
public class OuterClass { innerClass in = new innerClass(); // 在外部类实例化内部类对象引用 public void ouf() { in.inf(); // 在外部类方法中调用内部类方法 } class innerClass { innerClass() { // 内部类构造方法 } public void inf() { // 内部类成员方法 } int y = 0; // 定义内部类成员变量 } public innerClass doit() { // 外部类方法,返回值为内部类引用 // y=4; //外部类不可以直接访问内部类成员变量 in.y = 4; return new innerClass(); // 返回内部类引用 } public static void main(String args[]) { OuterClass out = new OuterClass(); // 内部类的对象实例化操作必须在外部类或外部类中的非静态方法中实现 OuterClass.innerClass in = out.doit(); OuterClass.innerClass in2 = out.new innerClass(); } }
注意:
1.内部类的对象实例化操作必须在外部类或外部类的非静态方法中实现,如果在这之外(静态方法、外部类)中则需要使用外部类的实例对象来进行,如上面的main函数中。
2.当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:(外部类.
this表示外部类对象
)内部类被实例化后也存放在堆中,而 外部类.
this可以活动外部类在堆中的对象。
外部类.
this
.成员变量
外部类.
this
.成员方法
public class Test { public static void main(String args[]) { OuterClass2 out = new OuterClass2(); // 实例化一个OuterClass2对象 // 调用doit()方法,返回一个OutInterface接口 OutInterface outinter = out.doit(); outinter.f(); // 调用f()方法,这样你根本不知道f方法是如何实现的,很好的进行了封装,这是内部类的最基本用途。 } } interface OutInterface { // 定义一个接口 public void f(); } class OuterClass2 { // 定义一个内部类实现OutInterface接口 private class InnerClass implements OutInterface { InnerClass(String s) { // 内部类构造方法 System.out.println(s); } public void f() { // 实现接口中的f()方法 System.out.println("访问内部类中的f()方法"); } } public OutInterface doit() { // 定义一个方法,返回值类型为OutInterface接口,对InnerClass进行了自动向上转型 return new InnerClass("访问内部类构造方法"); } }输出:访问内部类的构造方法 访问内部类中的f()方法
interface OutInterface { // 定义一个接口 } public class OuterClass { public OutInterface doit(final String x) { // doit()方法参数为final类型 // 在doit()方法中定义一个内部类 class InnerClass implements OutInterface { InnerClass(String s) { s = x; System.out.println(s); } } return new InnerClass("doit"); } }我们会发现doit()的参数设置为final类型。如果需要在方法体中使用局部变量,该局部变量需要被设置为final类型(该方法中的内部类只能访问方法中final类型的局部变量),因为在方法中定义的局部变量相对于该类来说是一个常量,我们不能对它进行改变。它的生命周期超过方法运行的生命周期(该方法被销毁了,但方法的返回对象还要存在),如果可以改变的话可能造成一个变量到时可能被两个拥有,但他们对应的值又不相同。所以该局部变量被设置为final。所以不能在内部类中该局部变量的值(这点和成员内部类中也不能改外部类的属性值一样)。
interface E{ public void A(); } public class B{ public E creat(final int a ){ return new E(){ //声明一个内部类,默认继承E接口 private int i = a; public int getvalue(){ return i; } @Override public void A() { // TODO Auto-generated method stub } }; } }
public class B { int x=100; static class Inner{ void doitInner(){ System.out.println("外部类"+x); //这里会编译报错 } //进行程序测试时,如果在每个Java文件中都设置一个main方法, //将出现很多额外的代码,而程序本身不需要这些方法时可以将main函数写入内部类中,这样只要用外部类.内部类就可以调用main函数了,测试完成时只要把这给类给删除就可以了。 public static void main(String args[]){ System.out.println("a"); } } }
public class C extends ClassA.ClassB{ //继承内部类ClassB public C(ClassA a){ a.super(); } } class ClassA{ class ClassB{ } }7.内部类的编译:
2.方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。
3.方便编写事件驱动程序及线程的编码
相关推荐
Java 内部类详解 Java 内部类是一种高级特性,允许在一个类的定义内部创建另一个类。这种设计模式提供了更灵活的代码组织方式,同时还可以实现特定的封装和访问控制。内部类主要分为四种类型:静态内部类、成员内部...
### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...
### Java内部类详解 #### 一、内部类的分类与概念 Java的内部类机制是其强大特性之一,它允许类作为另一个类的成员存在,从而增强了代码的封装性和复用性。根据定义和作用域的不同,Java内部类主要分为四类: 1. ...
Java 内部类是Java语言特性中的一个重要组成部分,它允许我们在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现复杂逻辑和封装上具有很大的灵活性。下面我们将详细...
### Java内部类的应用场景 #### 场景一:当某个类除了它的外部类,不再被其他的类使用时 内部类的使用场景之一是当某个类仅需被其外部类使用时。这种情况下,将此类定义为内部类可以提高代码的封装性和可维护性。 ...
Java内部类是Java语言提供的一种独特特性,它允许我们在一个类的定义内部定义另一个类。这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"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语言的一个独特特性,它允许我们在一个类的内部定义另一个类。这种设计提供了更高级别的封装和组织代码的方式。以下是关于内部类及其相关知识点的详细说明: 1. **内部类基本语法** - **实例内部...
### JAVA内部类总结 在Java编程语言中,内部类(Inner Classes)是一种非常重要的特性,它允许我们在一个类的内部定义另一个类。这种结构不仅能够提高代码的组织性,还能帮助我们更好地处理类与类之间的关系。根据...
Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...
Java 内部类总结 Java 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用 protected 和 private 修饰(而外部类只能使用 public 和缺省的包...
Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...
Java内部类详解 Java内部类是Java语言中的一种特殊类别,它是指定义在另外一个类内部的类。内部类可以访问外部类的所有成员变量和方法,包括私有的变量和方法。内部类可以分为四种:成员内部类、静态嵌套类、方法...
谈Java内部类的四个应用场景
Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类提供了增强封装的能力,使得内部类可以被隐藏在外部类中,仅对外部类可见,从而增加了代码的隐私性和安全性。同时,内部...
### Java内部类的作用 #### 一、定义及概念 内部类,顾名思义,指的是一个定义在另一个类内部的类。这样的结构让内部类能够访问外部类的成员(包括私有成员),并且允许内部类拥有不同的访问级别,如`private`、`...
Java内部类是Java语言的一个重要特性,它允许我们在一个类的内部定义另一个类。这种设计模式使得代码结构更加紧凑,同时也提供了更高级的封装和抽象。内部类主要有两种类型:成员内部类和局部内部类。 1. 成员内部...