您的位置:首页 > 编程语言 > Java开发

java 内部类(成员内部类)

2016-11-30 21:58 23 查看
在一个类的内部定义一个类,这个类叫做内部类

内部类的字节码文件是外部类名$(符号)内部类名:如下面的例子:(Outer$Inner.class)下面的例子有两个.class文件,Outer.class   Outer$Inner.class

这样容易区别开,这个.class文件是属于哪个内部类的。

成员内部类:在一个类的成员中就叫做成员内部类

局部内部类:在一个类的成员方法中的类就叫做局部内部类

成员内部类的访问方式:

成员内部类要注意的细节:

1)成员内部类可以访问外部类的所有成员  

2)内部类与外部类中存在同名的成员时,在内部类中默认是访问内部类的成员,那我想访问同名的外部类中的成员怎么办,(Outer.this.name)来访问外部类的成员比如在 class Inner{ string name="内部类"

System.out.println("这个是内部类的println方法:"+name);  //name 是内部类的,但是Outer.this.name这个就是外部类的} 

3)private的成员内部类就只能同过在外部类中提供一个方法来访问

4)如果内部类中定义啦一个static 的成员,那么这个内部类也必须定义成static 类

    那为什么内部类中的成员定义啦一个static时这个内部类也要去定义成static类?

因为假如内部类中的 static x="内部类成员变量";就必须的new Outer.Inner.x;这样的话x就要去依赖outer的对象的创建而存在,static修饰的变量是不依赖对象的创建而存在的。所以不用static去修饰内部类的话不行。

注意:static内部类在其他类比如(class Demo)中的对象的创建方式:Outer.Inner inner=new.Outer.Inner()

   方式一:在外部类中创建一个方法,在方法中去创建一个内部类的对象,来访问。

class Outer{
String name="这个叫外部类";
class Inner{
int x=10;
public  void print(){
System.out.println("这个内部类的print方法:"+x);
}

}
public void newInstance(){
Inner  inner=new Inner();
Inner.print();
}
}
class Demo{
public static void main(String[] args){
Outer outer=new Outer();
Outer.newInstance();
System.out.println("Hello World")
}

}
   方式二:在其他类中直接创建内部类的对象去访问内部类。

class Outer{
String name="这个叫外部类";
class Inner{
int x=10;
public  void print(){
System.out.println("这个内部类的print方法:"+x);
}

}

}
class Demo{
public static void main(String[] args){
Outer.Inner inner=new.Outer().new.Inner();
Inner.print();
System.out.println("Hello World")
}

}
 内部类的好处:是内部类可以访问外部类的所有成员比如下面代码中内部类就可以直接访问name
class Outer{
String name="这个叫外部类";
class Inner{
int x=10;
public  void print(){
System.out.println("这个内部类的print方法:"+name);
}

}
public void newInstance(){
Inner  inner=new Inner();
Inner.print();
}
}
class Demo{
public static void main(String[] args){
Outer outer=new Outer();
Outer.newInstance();
System.out.println("Hello World")
}

}
内部类的应用场景:我们在描述一类a事务的时候,该类内部还维护啦一个相对复杂的b事务,而且b事务还必须要访问的a事务的成员,

比如人与心脏,在描述人时有血液(看着是他的成员属性),心脏(人的成员属性),但是心脏也是一个比较复杂的b事务, 但同时他也需要血液这个属性。所有说这样就要用到内部类。内部类主要在图形化编程的时候,我们用到的最多,还有些事件的时候也有用到,比如点击事件时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐