首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Thinking in Java以内部类

2013-04-05 
Thinking in Java之内部类前言学习Java已经有一段日子了,最近的日子笔者在重新对java进行再学习。不过这个

Thinking in Java之内部类
        前言

          学习Java已经有一段日子了,最近的日子笔者在重新对java进行再学习。不过这个阶段的学习

    笔者不会再着眼于具体的语法哪些细枝末节的东西了,这个阶段的学习中笔者将会对以前学习的

    模糊的,遗漏的知识概念做一些相关性的总结。今天,恰好看到内部类这块了,记得以前对内部类

    的使用就有一些模糊,因此专门就内部类做一些总结。

      内部类概念

               所谓内部类就是指在一个外部类中再定义一个类(内部类),这样内部类就作为一个成员依附于

          外部类而存在。不过在使用内部类的时候需要注意的是内部类可以static,protect,private,但是

          外部类只能使用public和缺省的包访问权限.

            若非这两种编译出错: 

            Illegal modifier for the class Outer; only public, abstract & final are permitted  


              Tips:在创建一个内部类的时候除非你已经有了一个外部类对象,否则不可能生成

                 方法内部类对象,因为内部类对象会悄悄的链接到创建他的外部类的对象,没有外部类对象

             自然也就不可能生成内部类对象了,不过还需注意的是内部类是一个在编译时的概念,一旦编译

             通过,就会成为完全不同的两个类,也就是会出现Outer,class和Outer$Inner,class两个字节码

             文件。

           Thinking in Java以内部类

              局部内部类

                   在方法中定义的内部类称为局部内部类.它与局部变量类似,因此局部内部类是不能有访问

           修饰符的,因为它不是外部类成员,但是他可以访问当前方法中的代码块的常量,和外部类的所有

          成员.

         内部类的继承问题

                有时候我们只是需要继承内部类,但是内部类的构造器又必须用到外部对象的引用

           , 因此在继承一个内部类的时候就有点特别了,主要的问题在于外部类对象的引用必须

           初始化,而在被继承类中并不存在,也就是单一继承内部类的时候,没有内部类与其外部类

           的一种关联.

               可以使用一下方式解决:

      

package com.kiritor;import com.kiritor.Outer.Inner;class Outer {public Outer() {System.out.print("Outer:");new Inner();}class Inner {public Inner() {System.out.println("Inner");}}}public class Inner2 extends Outer.Inner {  Inner2(Outer outer)   {   outer.super();   //构造器只能是这种方式的   System.out.println("只能为此种构造器");   } public static void main(String[] args) {new Inner2(new Outer());}}
      输出结果为:

          Outer:Inner
           Inner
          只能为此种构造器
        可以看出的是,Inner2只是集成了内部类,但是其缺省的构造器并不能用,而且仅仅传递一个

    外部类的引用还不够,还必须首先调用外部类的构造方法.这样才提供了内部类与外部类对象

    的引用关联,才能够通过编译的.

     

热点排行