内部类

 

内部类

成员内部类

可以很容易调用外部类所有的属性和方法

//成员内部类
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修饰

3.方法是在栈上的,局部属性随方法的结束而消亡,但局部内部类不会消亡,所以局部属性必须是final修饰,才能在局部内部类使用.但全局变量可以随意使用.

posted @ 2019-12-11 22:05  hcjk  阅读(158)  评论(0)    收藏  举报