Java编程思想(2)学习笔记(8)2(转)

  Java编程思想(2)学习笔记(8)2(转)[@more@]

二只内部类(内隐类)

  

1只;内隐类的基本用法

  

1),如果要在外围类的非静态函数之外产生一个内部类对象,得以OuterClassName.InnerClassName的形式指定该对象的型别,而在非静态函数内则不用。

  公共类ExplicitStatic {

  

,类内容{

  

,私人int i=11;

  

,公共int值(){返回我;}

  

,}

  

,类目的地{

  

,私人字符串标签;

  

,目的地(字符串例2){

  

,

标签=为什么;   

,}

  

,字符串readLabel(){返回标签;}

  

,}

  

,公共目的地(String s) {

  

,//在外部类的非静态函数中可直接产生内部类对象

  

,返回新目的地(s);// <我> (1 <我>

  

,}

  

,公共内容跟(){

  

,返回新内容();// <我> (1 <我>

  

,}

  

,公共空船(字符串dest) {

  

//在外部类的非静态函数中可直接通过InnerClassName

  

//来指定对象型别

  

,内容();c=控制

  

,目的地d=(桌子);

  

,System.out.println (d.readLabel ());

  

,}

  

,公共静态void main (String [] args) {

  

,新ExplicitStatic ExplicitStatic p=();

  

,p.ship(坦桑尼亚);

  

,ExplicitStatic q=new ExplicitStatic ();

  

,//在外围类的非非静态函数内产生内部类对象

  

,ExplicitStatic。内容c=q.cont ();

  

,ExplicitStatic。目的地d=q.to(婆罗洲);

  

,//不能在静态函数直接生成内部类对象

  

//新内容();

  

,}

  

}   

2),对于非静态内部类,在外围类的非静态函数可以通过新产生一个内部类对象,如上面的(1)处。但要在非非静态函数产生一个内部类对象,则一定要关联到其封闭类的某个对象。

  

3),内部类的向上转型

  

当把一个内部类对象向上转型成为接口时,我们得到的只是一个参考。

  目的地{

界面   

,

字符串readLabel ();   

}   {

接口内容   

,

int值();   

}   类Parcel3 {

  

,私人类PContents实现内容{

  

,私人int i=11;

  

,公共int值(){返回我;}

  

,}

  

,保护类PDestination实现目的地{

  

,私人字符串标签;

  

,PDestination(字符串例2){

  

,

标签=为什么;   

,}

  

,公共字符串readLabel(){返回标签;}

  

,}

  

,公共目的地(String s) {

  

,返回新PDestination(年代);

  

,}

  

,公共内容跟(){

  

,

返回新PContents ();   

,}

  

}   

公共类ExplicitStatic {,

  

,公共静态void main (String [] args) {

  

,新Parcel3 Parcel3 p=();

  

,//把内部类对象向上转型

  

,内容c=p.cont ();

  

,目的地d=对(婆罗洲),,

  

,}

  

}   

虽然我们不能在ExplicitStatic类无法调用Pcontents类,但我们把一个Pcontents类对象向上转型为内容,就可对之进行调用。

  

4),内部类的作用域为定义该内部类的范围内。但内部类可在它的作用域之外被继承(见4)。

  {

接口内容   

,

int值();   

}   类Parcel3 {

  

,//PContents1类的作用域为Parcel3类内

  

,私人类PContents1实现内容{

  

,私人int i=11;

  

,公共int值(){返回我;}

  

,}

  

,公共内容cont1 () {

  

,

返回新PContents1 ();   

,}

  

,公共内容cont2 () {

  

,//PContents2类的作用域为函数cont2内

  

,类PContents2实现内容{

  

,私人int i=11;

  

,公共int值(){返回我;}

  

,}

  

,

返回新PContents2 ();   

,}

  

,//不能在函数cont2外使用PContents2类

  

,/*

  

,公共内容cont22 () {

  

,,返回新PContents2 ();

  

,}

  

,*/

  

,公共内容cont3(布尔b) {

  

,如果(b) {

  

,//PContents3类的作用域为当前如果内

  

,类PContents3实现内容{

  

,私人int i=11;

  

,公共int值(){返回我;}

  

,}

  

,

返回新PContents3 ();   

,}

  

,//不能在如果外使用PContents3类

  

,//返回新PContents3 ();

  

,返回null;

  

,}

Java编程思想(2)学习笔记(8)2(转)