内部类
内部类通俗的讲就是在一个类中嵌套的另一个类,但是不能和外部类同名
内部类的定义
1.将类的定义class xxxx{…}置入一个类的内部即可
2.编译器生成xxxx$xxxx这样的class文件
3.内部类不能够与外部类同名
内部类的使用
1.在封装它的类的内部使用内部类,与普通类的使用方式相同
2.在其他地方使用
•类名前要冠以外部类的名字。
•在用new创建内部类实例时,也要在 new前面冠以对象变量。
外部对象名.new 内部类名(参数)
下面写一个实例
class TestInnerclass
{
public static void main(String arg[])
{
//创建实例对象
Parcel p = new parcel ();
p.testship();
//外部对象名.new 内部类名(参数)
parcel.Contents c = p.new.Contents(33);
parcel.Destination d = p.new.Destination("jiangxi");
p.setProperty(c,d);
p.ship();
}
}
class Parcel
{
private Contents c;
private Destination d
class Contents//内部类
{
private int i;
Contents(int i){
this.i = i;
}
int value(){
return i ;
}
}
class Destination //内部类
{
private String lable;
Destination (String WhereTo) {
lable = WhereTo;
}
String Readlable(){
return lable;
}
}
void setProperty(Contents c ,Destination d){
this.c = c;
this.d = d;
}
void ship(){
System.out.println("move" + c.value() +"to" + d.Readlable());
}
public void testship(){
c = new Contents(22);
d = new Destination("beijing");
ship();
}
}
在内部类中使用外部类的成员
1.内部类中可以直接访问外部类的字段及方法
即使private也可以
2.如果内部类中有与外部类同名的字段或方法,则可以用
外部类名.this.字段及方法
下面煮个栗子
class A
{
private int s= 111;
public class B//内部类
{
private int s = 222;
public void mb(int s)
{
System.out.println(s);//输出局部变量s
System.out.println(this.s);//输出类B的变量s
System.out.println(A.this.s);//输出类A的变量s
}
}
}
内部类的修饰符
内部类与类中的字段、方法一样是外部类的成员,它的前面也可以有访问控制符和其他修饰符。
访问控制符:public,protected,默认及private。
( 注:外部类只能够使用public修饰或者默认)
final,abstract 。