分享
 
 
 

内部类的研究

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Java内部类

本文将详细的解释内部类,希望和大家交流.

简单的内部类定义形如这样:

class A{

class B{}

}这样的类被称为内部类,又 被称为内隐类.

从简单到深入一步一步的分析内部类的特点.

class OuterClass

{ static class A //静态内部类

{ public A( )

{ System.out.println("Test$A !"); } }

class B //非静态内部类

{ public B( )

{ System.out.println("Test$B !"); } }

public void disp( )

{

final int a=10; int b;

class C //成员函数中的局部内部类

{ public C( )

{ System.out.println(“in class C a="+a);

//System.out.println(b);

}

}

C c=new C( );

}

public class Test extends OuterClass

{

public static void main(String args[])

{ OuterClass.A a=new OuterClass.A( );

//建立静态内部类对象

B b=new OuterClass( ).new B( );

//建立非静态内部类的对象

//注意这个OuterClass().new B();相当于生成一个外部类的对象,然后在利用外部类对象生成内部类对象

OuterClass t=new OuterClass( );

t.disp( );

//通过外部对象调用一个对象方法的形式,新建立了对象C.

}

}

注意在上面的b在运行时会为0,因为是类属性.

class OuterClass

{

static class A { } //静态内部类

class B { } //非静态内部类

public void disp( )

{

class C{ } //局部内部类

}

}

编译后的结果:

OuterClass.class

OuterClass$A.class

OutClass$B.class

OuterClass$1$C.class

记住以下几句话:

1,一个内部类的对象能够访问创建它的外部类对象的所有属性及方法(包括私有部分)。

//可以闭上眼镜,把这个内部类等同于一个类的一个方法,当然就可以访问这个外部类的

//所有方法和属性,私有方法和属性是属于外部类的,当然也就等同于内部类的.

2,对于同一个包中的其它类来说,内部类能够隐藏起来。(将内部类用private修饰即可)

//只有在内部类中,才能定义一个为private类型的class,因为这时编译器已经把这个类看作这个类的成员了,但是在一般使用时,就是所谓的”顶级类时”,不能使用private,只能是public 或者是friendly.

如果要是想保证一个类不产生任何的对象,请在构造函数中,把构造函数声明成private.

3, 内部类可定义在方法中,称为局部内部类,但它只能使用方法中的final常量。

//定义在一个方法内的类,又被成为局部内部类,这个类只能使用在方法中的final常量,注意,这个常量是在一个方法中的,那么能否使用一个类中的常量呢?

当然是可以的,因为类中的常量在在一个方法中是可见的.

//

如果把一个类写在了一个if中,比如这样:

class A{

int a = 10;

if(a!=10){

class B{

B(){

System.out.println(a);

}

}

}

}

在编译后会有几个错误呢?

首先那个a没有被定义为final,你有一次上了圈套.

类B同样会被生成出来,只是离开了if域就失效了.

4,内部类可以被定义为抽象类

// abstract 类同样可以在内部类中

5, 非静态内部类不能声明本类的static成员

//只有一个静态的内部类,才可以声明一个static成员,

class A{

static class B{

//如果这里不是一个static类,是不可以被声明这个gg方法的.

static void gg(){

int a = 100;

System.out.println(a);

}

}

}

class aa{

public static void main(String args[]){

A.B hh = new A.B();

hh.gg();

}

}

使用内部类可以非常方便的编写事件驱动程序

这个在写事件驱动时,会有很好的解释.

匿名内部类

在某些情况下,我们只需要内部类的一个对象,那么我们就没有必要给内部类命名,没有名字的内部类我们称为匿名内部类

public class A extends Applet

{ public void init( )

{ addMouseListener( new B( ) );

}

class B extends MouseAdapter

{ public void mousePressed(MouseEvent me)

{ showStatus("Mouse Pressed."); }

}

}

用匿名内隐类修改:

import java.applet.*;

import java.awt.event.*;

import java.awt.*;

public class AnonymousInnerClassDemo extends Applet

{ public void init( )

{ addMouseListener( new MouseAdapter( )

{ public void mousePressed(MouseEvent me)

{ showStatus("Mouse Pressed"); } } );

}

}

下面是一个think in java里的例子

public class Pr{

public Concents cont(){

return new Concents(){

private int i= 11;

public int value (){return i;}

};//这里是有一个逗号

}

}

这个Contents是通过默认的构造函数产生的,匿名类的产生也就是一个新类向上转型到父类的过程.

那么如果一个父类没有一个默认的构造函数,应该什么办呢?

那就只有调用一个super()了.

class noname{

Warpping wrap(int x){

return new Warpping(x){

public int value(){

return super.value()*47;

}

};

}

public static void main(String s[]){

noname p = new noname();

Warpping w = p.wrap(10);

}

}

如果在匿名内部类中用到了外部对象

就必须保证这个外部对象是final的

public class PP{

public DD dest(final String dest, final float price){

return new DD(){

private int cost;

{

cost = Math.round(price);

if(cost>100)

System.out.println("Over budget");

}

};

}

publc static void main(String []arg){

PP h = new PP();

DD d = h.dest("haha",11.111);

}

}

好了,先写到这,我的邮箱是

flyboy1234@163.com

希望各位java爱好者和我联系,多多交流!

---------------------------------------------------flyboy1234

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有