内部类
内部类
成员内部类
//成员内部类
public class Inner{
public String name = "jack";
public void show(){
System.out.println("成员内部类");
System.out.println("num = " + num);
System.out.println("type = " + type+",flag = " +flag+ ",myChar = "+myChar );
}
}
局部内部类
没有访问修饰符 在方法中定义
//局部内部类
public void localInfo(){
int num = 20;
//局部内部类,没有访问修饰符
//局部内部类或者匿名内部类,如果要使用外部类的局部变量
//那么这个局部变量必须时final修饰的常量
//jdk1.8之前,必须用final声明,jdk1.8之后编译会自动加上final修饰
class LocalInner{
public void localShow(){
System.out.println("局部内部类");
System.out.println("localInfo num = " + num);
//调用全局变量
System.out.println("Outter num = " + Outter.this.num);
}
}
LocalInner li = new LocalInner();
li.localShow();
}
静态内部类
用static修饰 不能访问外部类中非静态的属性和方法 建议静态内部类的方法也定义为静态的,因为外部无法new静态内部类,就无法使用非静态的方法
public static class StaticInner{
//静态内部类,不能访问外部类中非静态的属性和方法
//建议静态内部类的方法也定义为静态的,因为外部无法new静态内部类,就无法使用非静态的方法
public static void staticInnerShow(){
System.out.println("静态内部类");
System.out.println("static String " + name);
}
}
匿名内部类
public abstract class Pet {
public abstract void happy();
}
//匿名内部类
Pet pet = new Pet(){
public void happy() {
System.out.println("匿名内部类");
System.out.println("宠物抽象类");
}
};
知识点
1.内部类调用外部类的属性和方法:外部类名.this.属性名或方法名
2.局部内部类或匿名内部类,只能使用外部的final修饰的常量.在jdk1.8之前,必须使用final声明,jdk1.8之后,编译会自动加上final修饰
浙公网安备 33010602011771号