-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、内部类可以直接访问外部类的成员,包括私有之所以可以直接访问外部类中的成员是因为内部类中持有了一个外部类的引用,
写法为外部类名.this(Outer.this)
2、外部类要访问内部类必须建立内部类对象
class Outer {
private int x = 3;
void method() {
Inner in = new Inner();// 内部对象
in.function();
}
class Inner// 内部类,内部类可以被私有修饰,外部类不能
{
int x = 4;
void function() {
int x = 6;
System.out.println("inner" + Outer.this.x);// 内部类直接访问外部类成员,私有也可以
}
}
}
class InterClassDemo {
public static void main(String[] args) {
// Outer out = new Outer();
// out.method();
// 直接访问内部类中的成员
Outer.Inner in = new Outer().new Inner();// 前边加外部类名字,内部类私有之后不能访问了
in.function();
}
}
内部类的访问规则:
1、内部类可以直接访问外部类的成员,包括私有之所以可以直接访问外部类中的成员是因为内部类中持有了一个外部类的引用,写法为外部类名。this(Outer.this)
2、外部类要访问内部类必须建立内部类对象
访问方式:
1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类(InterClassDemo)可以直接建立内部类对象
格式
外部类名。内部类名 变量名= 外部类名对象。内部类对象
- Outer.Inner in = new Outer().new Inner();
2、当内部类在成员位置上时,就可以被成员修饰符所修饰
比如:private:将内部类在外部类中进行封装
static:内部类就具备了静态的特性
当内部类被静态修饰后,只能访问外部类中的静态成员了,出现了访问局限
在外部其他类中,如何直接访问静态内部类的非静态呢?
new Outer.Inner().function();
在外部其他类中,如何直接访问静态内部类的静态成员呢?
Outer.Inner().function();//??
注意:当内部类中定义了静态成员,该内部类必须是静态的,否则内部类中不能有静态声明
当外部类中静态方法访问内部类时,内部类也必须是静态的
当描述事物时,事物的内部还有事物,该事物用内部类描述
匿名内部类:
1、匿名内部类就是内部类的简写格式
2、定义匿名内部类的前提
内部类必须是继承一个类或者实现接口
3、匿名内部类的格式:new 父类或者接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解为带内容的对象
5、匿名内部类中定义的方法最好不要超过3个,方便调用方法
class Body {
private class Heart// 心脏不需要对外暴露,需要封装
{
}
public void show() {
new Heart();
}
}// Heart在Body中比较好,便于直接访问外部类成员
class Outer {
private int x = 3;
static class Inner// 静态内部类
{
int x = 4;
static void function() {
int x = 6;
System.out.println("inner" + x);// 内部类直接访问外部类成员,私有也可以
}
}
class Inner2 {
void show() {
System.out.println("inner2 show");
}
}
public void method() {
// Inner.function();直接访问
new Inner2().show();
}
}
class InterClassDemo2 {
public static void main(String[] args) {
// Outer.Inner in = new Outer().new Inner();//前边加外部类名字,内部类私有之后不能访问了
// in.function();
new Outer.Inner().function();
}
}