【Java中那些让人摸不着头脑的各种类】


1、常用类(内部类、匿名类、抽象类)

对于局部类、方法、变量,只针对特定区域有效,访问权限无效。

外部类的修饰符可以为 public  和 默认缺省修饰符(default)。因为外部类在包中,只有包可见和包不可见。

外部类中的内部类可以看做是外部类的成员变量。

 

内部类:(常规内部类、静态内部类、局部内部类、匿名内部类)

   常规内部类:没有用static修饰且定义在外部类类体中,可直接访问外部类成员变量、方法。

   静态内部类:与静态内部方法相似,只能访问外部类的static成员,可通过对象引用访问外部类的成员变量。(实例变量、方法)

 局部内部类:存在于方法体或语句块中(包括方法、局部块、静态初始化块)不能加任何修饰符,只对局部有作用。

    匿名内部类:定义一个类的同时创建一个没有名字的类称为匿名内部类,只用一次。

 

静态内部类才可以定义static方法,

内部类权限修饰符可以为publicprotected(异包子类)、默认(同包)private(同类有效)所以说一个java文件可以有多个public修饰的类。


为什么使用内部类?

每个内部类都能独立的继承一个抽象类实现,无论是外部类是否已继承。最大的优点就是它能够非常好的解决多重继承的问题。

1)内部类可以有多个实例,且每个实例有自己的状态信息,相互独立。

2)在单个外部类中,可以让多个内部类以不同方式来实现同一个接口,或者继承同一个类。另一种形式的多态。

3)创建内部类实例对象不依赖外部类。

4)内部类没有令人迷惑的 is--a ”关系,它就是一个独立的实体。

5)内部类提供了更好的封装,除了外部类,其他类不可访问。


匿名类:

 匿名内部类:用在任何允许存在表达式的地方,只能用一次。

 局部内部类:用在任何允许出现局部变量的地方,可以在自己的定义域中多次使用。

  

 

抽象类:一般使用abstract修饰

   abstract不可与final、static、private共存,因为需要被继承,重写方法。

 抽象方法中不能有方法体,抽象类中可以没有抽象方法,可以有普通方法。

 抽象类有构造方法,可以给成员变量初始化,但不可实例化。

 抽象类可以实现接口,也可以继承自抽象类。

 抽象类可以定义普通成员变量而接口不可以,但是两者都可以定义静态成员变量。

 一个类继承抽象类,必须重写所有的抽象方法,除非这个类本身也是一个抽象类。

 


猜你喜欢

转载自blog.csdn.net/ca1m0921/article/details/80944865