内部类(innerclass)

来源:互联网 发布:淘宝开店电脑端描述 编辑:程序博客网 时间:2024/06/06 06:52

内部类就是在类里面定义的类,提供了更好的封装,只能让外部类直接访问,不允许同一个包其它类访问。

注意:内部类可以直接访问外部类的私有属性,内部类其实就是当做了外部类的成员,单外部类不能访问内部类的属性。

有以下几种,

①成员内部类:(如同外部类的成员)

              (静态成员)静态的:     static修饰

                                 注意几点:1、 当一个静态内部类存在,并不一定存在对应的外部对象,因此静态内部类的实例方法不能访问外部类的实例方法。

                                        2、静态内部类可看做外部类的静态成员,因此外部类的   方法    可以通过静态内部类名访问静态内部类的静态成员,

                                              通过    new  innerclassname  ()访问内部类的实例

                                             

             (普通成员)非静态的:注意 :内部类的对象寄存于外部对象里。

②匿名内部类:通常只使用一次,比如键盘监听操作。

③局部内部类:定义在方法内部,作用域只限于本方法,很少使用。


package neibulei;


/**
 * 内部类
 */
import neibulei.Face.Nose;//或者把import neibulei.Face.Nose;去掉,在Nose前面加上f.Nose n

public class Outer {
public static void main(String[] args) {
Face f = new Face();
Nose n = f.new Nose();// 注意内部类对象是寄存与外部类对象中的,不能直接调用,要通过外部类对象来调用
n.breath();
Face.Ear ear = new Face.Ear();
ear.listen();
}
}

class Face {
String  type="瓜子脸";
static String color="红润!";
/**
* 非静态内部类

* @author Administrator
*
*/
class Nose {
String type;


/**
* 注意下面的方法不能加static,因为Nose类对象从属于外部类对象,是对象,而static是从属于类的,所以不行。
*/
public void breath() {
System.out.println(Face.this.type);// 访问的是外部类的type
System.out.println("呼吸量!");
}
}

/**
* 静态内部类

* @author Administrator
*
*/
static class Ear {
void listen() {
System.out.println(Face.color);//可以访问外部类的静态属性,不能访问非静态的。
System.out.println("我在听!");
}


}

}

cosole显示如下:

瓜子脸
呼吸量!
红润!
我在听!

0 0
原创粉丝点击