1、本地内部类 :定义在方法当中的类
public class TestDemo0826 {
public void func(){
//本地内部类
class Test{
public int a;
}
//缺点:只能在当前方法当中使用
}
public static void main(String[] args) {
}
}
2、实例内部类
class OuterClass{
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
//实例内部类,你可以把他当做是外部类的一个普通实例的成员
class InnerClass{
public int data4 = 4;
private int data5 = 5;
public static final int data6 = 6;
//在实例内部类中不能定义一个静态的成员变量!非要定义,只能定义一个静态常量
public static int data7 = 6; //显示报错,static属于类的,不属于对象的
public InnerClass(){
System.out.println("不需要带参数的内部类的构造方法");
}
public void test(){
System.out.println(" ");
}
}
}
如何实例化,实例内部类的对象?
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.test();
}
实例内部类当中,如果包含了和外部类同名的成员变量,那么如何在实例内部类当中访问?
System.out.println(OuterClass.this.data1);
System.out.println(this.data1);
实例内部类当中包含两个this,一个是外部类的this,一个是自己的this
3、静态内部类
如何实例化静态内部类对象?
class OuterClass{
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
//静态内部类
static class InnerClass{
public int data4 = 4;
private int data5 = 5;
public static int data6 = 6;
public void test(){
System.out.println("");
}
}
}
public static void main1(String[] args) {
OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
innerClass.test();
}
如何访问外部类的普通的成员变量?
class OuterClass{
public int data1 = 1;
private int data2 = 2;
public static int data3 = 3;
//静态内部类
static class InnerClass{
public int data4 = 4;
private int data5 = 5;
public static int data6 = 6;
public void test(){
System.out.println(new OuterClass().data1);
System.out.println("");
}
}
}
4、匿名内部类
class Tast{
public void test(){
System.out.println("test");
}
}
public class TestDemo0826 {
public static void main1(String[] args) {
new Tast(){
}.test();
}
public static void main1(String[] args) {
//重写
new Tast(){
@Override
public void test() {
System.out.println("hu");
}
}.test();
}
}