×××××格式问题
内部类是非静态的,内部类的方法也是非静态的
建立外部类对象,建立内部类对象
外部类名.内部类名 变量 = new 外部类对象.new内部类对象
Outer.Insider in = new Outer().new Insider();
内部类是静态的,内部类的方法也是静态的
类名直接调用
外部类名.内部类名.内部类方法();
Outer.Insider.show()
Outer.Insider in = new Outer. Insider(); --- 可以
内部类是静态的,内部类的方法是非静态的
外部类名.内部类名 变量 = new 外部类.内部类对象()
Outer.Insider in = new Outer. Insider(); --- 可以
/***
*内部类的探讨
一 内部类 单独在一处
* 1:定义外部类 persion
* 2:定义内部类 computer
* 探讨 1:两两者之间是否可以进行数据交换
* 外部类不可以用 类名 或者 对象 访问内部类的 态成员 与方法 无论是静态与非静态
* 内部类 可以访问外部类的成员变量 包括 私有 和 静态
* 内部类不可以访问外部的 方法
* 要访问你内部成员 必须创建 对象 Persion.Computer com = new Persion().new Computer(); 用com 去访问
* 内部内可以实现接口
二 内部类 用static 修饰 并且 方法也是静态的
Persion.Computer.print();
定义对象
Persion.Computer com = new Persion.Computer();
探讨 1:两两者之间是否可以进行数据交换
* 外部类不可以用 类名 或者 对象 访问内部类的 态成员 与方法 无论是静态与非静态
* 内部类 可以访问外部类的成员变量 包括private 但是内部成员变量 必须用 static 修饰
* 内部类不可以访问外部的 方法 外部方法只可用外部对象调用
*
三 · 局部 内部类
* 就是类在外部类的方法中
* 1 数据访问 与方法调用
* 外部类不可以用 类名 或者 对象 访问内部类的 态成员 与方法 无论是静态与非静态 访问不到
* 内部类 可以访问外部类的成员变量 无论是私有的还是静态的 但是要访问方法中 的 成员变量 必须 加上final修饰
* Persion p = new Persion();
* System.out.println( new Computer().cpu );
* new Computer().print();
* p.open(); 格式可以访问局部内当中的方法 和变量
* 解析
* open方法,中有变量x,如果open方法,执行完毕,出栈,变量x就死亡了
·可以print是另外一个类的
new Computer().print(); 此时变量x已经死亡,print方法,访问不到x
· 解决办法是将 x 变量,变成了最终的修饰, x已经是一个常量
·因此在编译的时候,变量的值已经是定死的了,编译的时候,JVM直接将你show方法的x,变成3了
* 内部类不可以访问外部的 方法
*
*/
3 匿名内部类
接口或者父类引用 变量 = new 接口或者是父类(){
重写抽象方法
};
变量.方法()
匿名内部类的前提
必须有继承或者是实现
和局部内部类 用法相同
相当于
ABC a = new ABC() 然后用a 去调用内部类中大方法
内部类。
特点:
内部类可以直接访问外部类中的成员。
外部类要访问内部类中的成员必须创建内部类的对象。
为什么要定义内部类呢?
类是用于描述事物的,而事物中如果还有具体的事物,而且这个内部的事物在访问着所属事物中的内容。
这时这个内部的事物,也需要用到类来描述。这个类就是内部类。
为什么内部类可以直接访问外部类中的成员呢?
因为内部类都持有一个外部类的引用。 外部类名.this
*//*
内部类的修饰符。
当内部类定义在外部类的成员位置上时,
可以使用成员的修饰符来进行内部类的修饰,
1,权限修饰符。
默认或者公有
可以直接这样访问内部类。
外部类名.内部类名 变量名 = new 外部类对象.new 内部类对象;
私有:是不可以直接在外部访问。
2,static修饰符。
内部类被静态修饰,出现访问局限性,只能访问外部类中的静态成员。
内部类被静态后,会随着外部类的加载而加载。
如果内部类中定义了静态成员,该内部类必须被静态修饰。
//访问静态内部类中的非静态成员。 直接创建内部类对象。
外部类名.内部类名 变量名 = new 外部类名.内部类名();
//访问静态内部类中的静态成员。 不需要对象。
外部类名.内部类名.内部类的静态成员
记住:内部类只有定义在外部类的成员 位置上,才具备这些修饰符。 |