静态内部类和普通内部类的区别

public class MyTest {

    private String str ="";
    private static String static_str ="";

    public static void main(String[] args) {
        MyTest.Inner s = new MyTest().new Inner();
        s.hello();
        MyTest.StaticInner t = new MyTest.StaticInner();
        t.hello();

        MyTest.StaticInner.static_str="";
    }

    public class Inner{
        void hello(){
            System.out.println(str);
            System.out.println(static_str);
        }
    }

    public static class StaticInner{
        static String static_str="";
        void  hello(){
            MyTest test = new MyTest();
            System.out.println(test.str);
            System.out.println(static_str);
        }
    }
}
外部类访问内部类:
    外部类访问普通内部类的非静态成员(普通内部类不能定义静态属性或静态方法): MyTest.Student s = new MyTest().new Student();  s.hello();
    外部类访问静态内部类的非静态属性: MyTest.Teacher t = new MyTest.Teacher();  t.hello();
    外部类访问静态内部类的静态属性: MyTest.Teacher.School_Name;
内部类访问外部内:
    所有内部类可以直接使用外部类的静态属性
    普通内部类可以直接使用外部类的非静态属性
    静态内部类必须通过外部类的对象访问外部类的非静态属性:MyTest test = new MyTest(); test.hello();
普通内部类里面不能定义各种静态的成员(包括静态变量、静态方法、静态代码块和静态内部类),而静态内部类中则可以。原因:普通内部类必须通过外部类的对象来访问,违背了静态成员可以直接通过类名访问的规则。
初始化方式不同:
    静态内部类初始化 MyTest.Teacher t = new MyTest.Teacher();
    非静态内部类初始化 MyTest.Student s = new MyTest().new Student();
注意:

静态内部类和普通内部类都可以定义非静态的属性或方法,都以用new实例化出静态内部类和普通内部类的对象。原因:用static修饰内部类,只是说明该类属于外部类本身,而不是属于外部类的某个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26182553

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值