Java编程思想(2nd)学习笔记(8)-3

原创 2003年10月28日 23:48:00

3.  如何产生inner class对象的总结

3.1 non-static内隐类

1)        enclosing classnon-static函数中可以直接通过new来产生

2)        enclosing classstatic函数或其它的class中,必须同时存在一个enclosing class对象(原因在上面2.1已说明)。

interface Contents{

    int value();   

}

class Parcel1{  

    protected class PContents implements Contents{

        public int value() { return 1; }

    }

    public Contents cont(){

      //non-static函数中直接通过new来产生PContents class对象

        return new PContents();

    }

    public static void test(String[] args){

        Parcel1 p1 = new Parcel1();

        //static函数中通过外部类Parcel1对象来产生

        Contents c1 = p1.cont();  //调用函数

        c1 = p1.new PContents(); //通过new

    }

}

public class ExplicitStatic{   

    public static void main(String[] args){

        //通过外部类Parcel1对象来产生

        Parcel1 p1 = new Parcel1();

        Contents c1 = p1.cont();  //调用函数

        c1 = p1.new PContents();  //通过new

    }

}

3.2 static内隐类

1)  除了可用产生non-static内隐类对象的方法来产生之外,也可以不通过已存在一个enclosing class对象来产生。

interface Contents{

    int value();   

}

class Parcel1{  

    protected static class PContents implements Contents{

        public int value() { return 1; }

    }

    public Contents cont(){

      //non-static函数中直接通过new来产生PContents class对象

        return new PContents();

    }

    public static Contents cont1(){

        //static函数中直接通过new来产生PContents class对象

        return new PContents(); //1

    }

    public static void test(String[] args){

        Parcel1 p1 = new Parcel1();

        //static函数中通过外部类Parcel1对象来产生

        Contents c1 = p1.cont();  //调用函数

        c1 = p1.new PContents();  //通过new

        //static函数中直接通过new来产生PContents class对象

        c1 = new PContents();  //1

    }

}

public class ExplicitStatic{   

    public static void main(String[] args){

        //通过外部类Parcel1对象来产生

        Parcel1 p1 = new Parcel1();

        Contents c1 = p1.cont();  //调用函数

        c1 = p1.new PContents();  //通过new

        //直接产生

        c1 = Parcel1.cont1();  //2

    }

}

上面的(1)和92)中的代码只有在Pcontents classstatic时才能通过。(1)不能通过的原因见2.1

2.  inner class的继承

1)        inner class可被继承。inner classdrived classdrfault构造函数必须传入一个reference指向outer object,并在构造函数中调用outer class的构造函数。

class WithInner{

    class Inner{}

}

class InheritInner extends WithInner.Inner

{

    //InheritInner(){}  编译错误

    InheritInner(WithInner wi) { wi.super(); }

}

public class ExplicitStatic{   

    public static void main(String[] args){

        WithInner wi = new WithInner();

        InheritInner ii = new InheritInner(wi);

    }

}

2)        覆写inner class不具备多态特性。

class Egg{

    class Yolk{

        public Yolk(){

            System.out.println("Egg.Yolk()");

        }

    }

    private Yolk y;

    public Egg(){

        System.out.println("New Egg()");

        y = new Yolk(); //1

    }

}

class BigEgg extends Egg{

//2尝试覆写inner class

    class Yolk{

        public Yolk(){

            System.out.println("BigEgg.Yolk()");

        }

    }

}

public class ExplicitStatic{   

    public static void main(String[] args){

        new BigEgg(); //3

    }

}

结果为:

New Egg()

Egg.Yolk()

在(2)中我们尝试覆写inner class。当通过(3)产生一个BigEgg时,会调用Egg的构造函数。在Egg的构造函数的(1)处产生的是Egg.Yolk class对象,而不是子类BigEgg.Yolk class对象。

**:如上所示,上述两个inner class是完全独立的个体,各有其专属的命名空间。

Java编程思想重点笔记(Java开发必看)

Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a...
  • lanxuezaipiao
  • lanxuezaipiao
  • 2014年12月09日 13:22
  • 17706

【java】《java编程思想》 读书笔记

之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,《java编程思想》这本书翻译水平确实不是很好,很多话读着会比较拗口。推荐读之前,先去网上搜索 “java...
  • a2888409
  • a2888409
  • 2015年10月15日 10:07
  • 1919

《JAVA编程思想》读书笔记1——OOP思想

面向对象思想JAVA是一种面向对象编程语言,它基于Smalltalk语言,作为OOP语言,它具有以下五个基本特性 万物皆对象,每一个对象都会存储数据,并且可以对自身执行操作。因此,每一个对象包含两部分...
  • yu616568
  • yu616568
  • 2016年05月03日 22:34
  • 1181

《Java编程思想》学习笔记8——Java new I/O(一)

为了提高Java I/O的速度和效率,从JDK1.4开始引入了java.nio.*包,即java new I/O(NIO)。     事实上,为了利用java nio的速度和效率优势,原来的java...
  • wangjun_818
  • wangjun_818
  • 2017年06月28日 10:48
  • 120

《Java编程思想》学习笔记3——内部类

转自http://blog.csdn.net/chjttony/article/details/6704618 1.java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部...
  • u011919301
  • u011919301
  • 2015年03月06日 21:25
  • 375

《Java编程思想》学习笔记3——内部类

1.Java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部类允许编程人员将逻辑上相关的类组织在一起,并且控制内部类对其他类的可见性。 2.在外部类的非静态方法中创建内部类...
  • wangjun_818
  • wangjun_818
  • 2017年06月27日 17:20
  • 141

《Java编程思想》学习笔记3——内部类

1.java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部类允许编程人员将逻辑上相关的类组织在一起,并且控制内部类对其他类的可见性。 2.在外部类的非静态方法中创建内部类的对象语...
  • ibmfahsion
  • ibmfahsion
  • 2013年02月22日 14:46
  • 211

《Java编程思想》学习笔记3——内部类

1.java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部类允许编程人员将逻辑上相关的类组织在一起,并且控制内部类对其他类的可见性。 2.在外部类的非静态方法中创建内部类...
  • z742182637
  • z742182637
  • 2016年01月04日 09:30
  • 180

《Java编程思想》学习笔记3——内部类

1.java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部类允许编程人员将逻辑上相关的类组织在一起,并且控制内部类对其他类的可见性。 2.在外部类的非静态方法中创建内部类的对象语...
  • chjttony
  • chjttony
  • 2011年08月20日 17:29
  • 2645

《Java编程思想》学习笔记3——内部类

1.java中,可以将一个类的定义放在另一个类的内部,这种叫做内部类。 内部类允许编程人员将逻辑上相关的类组织在一起,并且控制内部类对其他类的可见性。 2.在外部类的非静态方法中创建内部类...
  • Datuqiqi
  • Datuqiqi
  • 2015年06月02日 20:35
  • 495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java编程思想(2nd)学习笔记(8)-3
举报原因:
原因补充:

(最多只允许输入30个字)