内部类
一.实例化
特点:1.编译之后可生成独立的字节码文件
2.内部类可直接访问外部类的私有成员,且不破坏封装
package TestOfInnerClass;
import TestOfInnerClass.Body.Inner;
public class Practice01 {
public static void main(String[] args) {
//1.
// Body body = new Body();
// Body.Inner inner = body.new Inner();
// inner.show_Basic();
//2.
Inner inner = new Body().new Inner();
inner.show_Basic();
}
}
package TestOfInnerClass;
public class Body {
private String name = "Mikes";
private int age = 19;
class Inner{
private String address = "Jinagxi";
private String phone = "239****3258";
private String name = "Jack";
public void show_Basic(){
System.out.println(Body.this.name);
System.out.println(name);
System.out.println(age);
System.out.println(address);
System.out.println(phone);
}
}
}
实例化内部类的方法如上有:
1.先实例化外部类
Outer outer = new Outer();
再实例化内部类
Outer.Inner inner = outer.new Inner();
2.直接在实例化内部类时实例化外部类
Inner inner = new Outer().new Inner();
二.注意事项
1.重名访问细节
在show_Basic()中
若内部类与外部类重名则优先访问内部类
若要访问外部类则使用Outer.this.name
静态内部类
实例化不需要依赖外部类,可直接创建或通过类名访问,可声明静态成员。
Body.Inner02 inner02 = new Body.Inner02();
若内部类要访问外部类成员则要先实例化外部类
public static class Inner02{
private static String address = "Jinagxi province";
private static String phone = "259****3258";
private String name = "Jack";
public void show_Basic(){
Body body = new Body();
System.out.println(body.age);
System.out.println(body.name);
System.out.println(address);
System.out.println(phone);
}
}
局部内部类
概念:定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
public void show(){
String address = "jx";
class Inner03{
private String phone = "11111111111";
private String name = "Jack";
public void show_Basic(){
System.out.println(Body.this.name);
System.out.println(name);
System.out.println(age);
System.out.println(address);
System.out.println(phone);
}
}
Inner03 inner03 = new Inner03();
inner03.show_Basic();
}
其与普通的内部类差不多,但是,在上面的代码中address默认为常量即默认加了final,否则在执行完show函数后该变量被清除,但是inner03不会被清除这个类也不会被清除,这是不允许的。
匿名内部类
特点:
没有类名的局部内部类
必须继承一个父类或实现一个接口
定义类、实现类、创建对象的语法合并,只能创建一个该类的对象。
Skills person = new Skills() {
@Override
public void service() {
System.out.println("获得服务技能");
}
};
person.service();