内部类
成员内部类
直接在外部类中定义一个类,就是成员内部类
成员内部类不能出现静态成员(静态属性和静态方法都不可以)
在成员内部类中可以访问外部类的任何属性和任何方法
内部类语法:
class A{
class B{
}
}
内部类生成的文件格式是: 外部类$内部类.class
局部内部类
不能有public、protected、private以及static修饰符的。
静态内部类
静态内部类也是定义在另一个类里面的类,在类的前面加一个关键字static
特点
不需要依赖于外部类的
static class my {
}
如果外部类和内部类存在相同的成员属性名时,访问外部类的成员属性时应该用
外部类名.this.成员属性名
内部类对象的创建:如果在外部类的成员方法中可以直接创建内部类的对象,
且内部类的对象可以访问内部类的所有成员
如果在外部类的外面创建内部类的对象,则必须依赖外部类的对象才能创建内容类的对象,内部类的对象只能访问public 成员
public class MyClass {
private String name ="外部NAME";
private static String address="这是地址";
public class MyInnerClass{
public String phone = "12345";
private String computer ="1111";
public void innerMethod(){
System.out.println("name:"+name+",地址"+address);
}
}
public void say(){
System.out.println("呵呵:"+ name +" " + address);
//在外部了的成员方法中直接创建内部类对象
MyInnerClass mic = new MyInnerClass();
mic.computer="222";
mic.phone="1111";
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
//在当前类的外部创建成员内部类对象,需要依赖外部类的对象
MyClass mc = new MyClass();
MyInnerClass innerClass = mc.new MyInnerClass();
MyInnerClass innerClass2 =new MyClass().new MyInnerClass();
innerClass.innerMethod();
innerClass.phone="ssss";
//innerClass.computer="aaaaaaaa";不能访问
}
}