内部类,匿名类

1.什么是内部类?
《JAVA programming》里这样定义的:
内部类(又叫嵌入类),是一种在其他类内部定义的类。下面有例子:

public class showInnerClass{
  private int date;
public void m(){
 InnerClass instance = new InnerClass();
 }
class InnerClass{
public void mi(){
data++;
m();
  }
 }
}

InnerClass类在showInnerClass类的内部定义。有下列特征:
(1)内部类可以引用包含在它的外部类中的数据和方法,所以不必把外部类的引用传递给内部类的构造方法,基于这个原因,内部类可以使程序简单明了。
(2)内部类只是用来支撑外部类的工作。编译后,他的名称形如“外部类名称 . c l a s s s h o w I n n e r C l a s s I n n e r C l a s s , s h o w I n n e r C l a s s 内部类名称.class”。例如,showInnerClass中内部类InnerClass,被编译为showInnerClass $InnerClass.class。
(3)内部类可以声明为public,protected,private,其意义与用在类的其他成员上相同。
(4)内部类可以声明为static的,可以使用外部类的类名来访问静态的内部类,但静态的内部类不能访问外部类的非静态成员。
(5)经常在外部类中创建内部类的对象,但也可以从另外的类中创建内部类的对象。如果内部类是非静态的,必须先创建外部类的实例,然后使用下列语法创建内部类的对象:

外部类.内部类 内部类对象名 = 外部类对象.new内部类();

(6)如果内部类是静态的,使用下列语法可以创建它的对象:

外部类.内部类 内部类对象名 = new外部类.内部类();

2.我们为什么需要内部类?
有人有问题:内部类要实现的东西,用前面已学的东西也可以实现,为什么要用它?这个问题粗略的来讲可以从使用环境来解释它。有的地方我们用内部类的方法会更方便。

3.匿名类
匿名类就是没有名字的子类。因为没有名字,可以使代码更简洁。。例如
Bank是类,下面代码用Bank的一个子类创建对象:

new Bnak(){
...类体
}

我们可以看出这样使子类的对象的创建更简洁了。但也有一个的局限性,就是一次使用。不能在使用第二次这个类,因为没有名字。

发布了35 篇原创文章 · 获赞 0 · 访问量 1299

猜你喜欢

转载自blog.csdn.net/c1776167012/article/details/102942213