Java基础--内部类

1.成员内部类

public class AnonymousClass {
//外部类的私有属性
    private int id;
    //成员内部类
    //不能用private修饰
    public class memberClass{
    	//内部类的方法不能用private修饰
       public void say(){
            System.out.println("我是成员内部类"+"我可以访问外部类的字段:"+id);
        }
    }

为什么不能用private修饰,或者说不建议使用private修饰:
因为假如new一个内部类对象,则内部类对象不能是私有的,此外如果要调用内部类的方法,该方法也不能是私有的。
并且内部类可以访问外部类的私有属性。

2.局部内部类

public class AnonymousClass {
	//局部内部类在外部类的方法中
	public void test(){
	//局部内部类不能用修饰符修饰
	//可以把局部内部类看作是方法当中的局部变量
        class localClass{
        //局部内部类中可以定义属性和方法
           private int age;
            public localClass(int age){
                this.age = age;
            }
        }
        System.out.println(new localClass(5).age);
    	}
    }

局部内部类可以看作是外部类定义的方法里面的局部变量

3.匿名内部类

class unnamedClass{
private int id;
public unnameClass(){this.id = id;}
public int getId(return this.id;}

class outter{
public void test(int i ){
sout(i);}

class main{
psvm(){
//先new一个外部类对象
outter out = new outter();
//调用外部类对象的test方法
//test方法的参数由内部类unnamedclass提供
//括号内new 一个内部类,调用其方法
out.test(new unnamedClass).getId());

匿名内部类最常用的状态就是直接在参数内部new classxxx,因为不需要前面加类对象的名字,顾名思义内部类。匿名内部类可以是父类和接口类,但是如果要new一个接口类在参数里面的时候必须要重载接口类内部的抽象方法。
静态内部类

public static class staticClass{
//方法和字段必须用static修饰
//无参构造方法在类对象创建时调用
public staticClass(){
sout("我是静态类”);
}
class main{
psvm(){
out.staticClass = new out.staticClass();
}

就是内部类前面加static修饰。跟成员内部类类似,但需要注意的是,静态内部类可以不通过外部类直接new,并且跟成员内部类还有一点不相同,静态内部类不能调用外部类非static字段,原因是:静态内部类不依赖外部类创建,如果外部类对象没有创建,而静态内部类创建了,则不能调用外部类的字段。

你可能感兴趣的:(Java基础--内部类)