Java内部类总结

来源:互联网 发布:上海数据港的竞争对手 编辑:程序博客网 时间:2024/06/05 11:45

Java内部类总结

 

本文对java内部类的的定义和使用方法以及它们的应用方向都会做比较全面的介绍。

 

一.相关定义和使用方法

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。

 一般来说,有4中内部类:常规内部类、静态内部类、局部内部类、匿名内部类。


其中静态内部类和匿名内部类是我们有时候会使用到的,要会使用就可以了,另外两个内部类,基本不用到。

 

这里先说一下个人理解:内部类在外部类的里面,其实就相当于外部类的成员实例。

和类里面的方法和变量差不多,但是也会有点不同。

基本规则还是要遵守的,比如被static修饰的静态方法不能访问,非静态的方法或变量;

所以main方法不能直接访问没有被静态修饰的内部类方法或变量。

 


(一)成员内部类


使用格式:

public class 外部类 {
   //内部类可以拥有private访问权限、protected访问权限、public访问权限及默
认的访问权限,外部类只能被public和默认访问两种权限修饰
   访问修饰符 class 内部类 {
        //如果成员内部类用private修饰,则只能在外部类的内部访问;
       //如果用public修饰,则任何地方都能访问;
      //如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问 
  //如果是默认访问权限,则只能在同一个包下访问
 }
 }

 

 成员内部类是依附外部类而存在的,也就是说,

如果要创建成员内部类的对象,前提是必须存在一个外部类的对象

 

外部类 a = new 外部类();
外部类.内部类 b = a.new 内部类();  

如果需要访问外部类的属性和方法,需要使用外部类.this实现,如下:
1. 外部类.this.成员变量
2. 外部类.this.成员方法


成员内部类的使用示例:

 





(二)局部内部类

局部内部类是定义在一个方法或者一个作用域里面的类,

它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。 

所以它基本上不会用到!


使用格式:


class 外部类{ 
  public void print(){
class 局部内部类{
void print(){
System.out.print("局部内部类");
  }
  }
  局部内部类 a= new 局部内部类();
a.print();
   }
 } 

 

局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

 

局部内部类使用的示例:





 

(三)匿名内部类 

 

匿名内部类一般是在某个方法里面被调用

匿名内部类是我们使用的最多的方式,

一般来说,都是在实现一个抽象类的或者接口的同时,将他的抽象方法实现,

这时我们的类实际上是该抽象类或者接口的子类,只是没有命名,方法的实际实现每次都不一样,不能去公用,

那么一般直接使用匿名内部类实现。


使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,

但是前提是这个父类或者接口必须先存在才能这样使用


比如下面的例子,线程的启动,也是我们经常会使用的 

 

 


 

 

(四)静态内部类 (嵌套类)


静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。

静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,

并且它不能使用外部类的非static成员变量或者方法


静态内部类与普通内部类区别(不记)
1. 嵌套类的对象,并不需要其外部类的对象。 即它可以不依赖于外部类实例被实例化。
2. 不能从嵌套类的对象中访问非静态的外围类对象。这是由Java语法中"静态方法不能直接访问非静态成员"所限定
3. 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问。
4. 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
5. 非静态内部类的非静态成员可以访问外部类的非静态变量。 

 

调用静态内部类,和调用另外一个java文件写的普通类是一样的!

 

 示例:




 

 

以上java内部类的大致内容,但是我们在开发的使用还是尽量少用。

上面除了匿名内部类可以记一下用法,其他的不要记住都可以的。

对内部类的学习,只是为了看得懂内部类的格式,了解不同的代码编程习惯。



2 0
原创粉丝点击