8.内部类

Object类是所有类的基类,要注意使用equals()方法,默认比较地址。

---------------------------------------------------------------------------------------------------------------

内部类:

class Outer{

class Inner{ }

}

---------------------------------------------------------------------------------------------------------------

对于内部类:

1.可以直接访问外部类成员(包括private成员),内部类持有外部类的引用:Outer.this

2.外部类要访问内部类,必须建立内部类对象:Outer.Inner in=new Inner();

3.内部类可以被私有修饰

非私有内部类可以在外部其他类直接创建对象:

Outer.Inner in=new Outer().new Inner();

---------------------------------------------------------------------------------------------------------------

静态内部类:

内部类具有static特性

特点:只能直接访问外部类中的static成员,出现了访问权限


外部其他类访问static 内部类:

new Outer.Inner().function();

访问static方法:

Outer.Inner.function();


注意:当内部类中定义了静态成员,该内部类必须是静态的。

   当外部类中静态方法访问内部类时,内部类也必须是静态的。


内部类定义在局部时,

1.不可以被成员修饰符修饰;

2.可以直接访问外部类中的成员,但不能访问它所在局部中的变量,只能访问final修饰的局部变量

method(){

final int x=3;

class{

sop(x);

}

}

---------------------------------------------------------------------------------------------------------------

内部类定义原则:

当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物

在使用外部事物的内容

---------------------------------------------------------------------------------------------------------------

匿名内部类:

  class Outer{

class{}

}

---------------------------------------------------------------------------------------------------------------

定义前提:内部类必须继承一个类/接口

abstract clas AbsDemo{

abstract void show();

}

class Outer{

new AbsDemo{    //对象:AbsDemo子类对象(简化书写,覆盖方法)

void show(){

sop(...);

}

}.show();//调用show()

}


匿名内部类定义的方法最好不要超过3个;

无意义的使用方式:

AbsDemo d=new AbsDemo(){ };

虽有多态的味道,但d中无法调用父类未定义的方法,只能是用父类方法;


---------------------------------------------------------------------------------------------------------------

如何理解Test.function().method():

可直接使用Test.function(),则该function()为Test的静态方法

后调用method(),可见Test function()返回的是一个对象

则有两种可能,function()内组合了其他外部类,或者内部使用了匿名内部类


此处研究匿名内部类:代码如下:

interface Inter{ public void method();}

class Test{

public Inter function(){

return new Inter(){

public void method{...};

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章