0426 java内部类

静态内部类

使用static修饰的内部类我们称之为静态内部类,我们要知道只要是static修饰的类那它一定是内部类,不可能是外部类。 静态内部类与非静态内部类之间存在一个最大的区别,非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类的对象,但是静态内部类却没有。没有这个引用就意味着:

  • 它的创建不需要依赖于外围类的对象
  • 它不能使用任何外围类的非static成员变量和方法(因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象)见下面例子
  • 静态内部类内允许有static属性、方法;
public class OuterClass {

    String outerField = "Outer field";
    static String staticOuterField = "Static outer field";

    class InnerClass {
        void accessMembers() {
            System.out.println(outerField);
            System.out.println(staticOuterField);
        }
    }

    static class StaticNestedClass {
        void accessMembers(OuterClass outer) {
            // Compiler error: 不能访问Outer class的非static变量
            // System.out.println(outerField);
            System.out.println(outer.outerField);
            // 可以通过创建外部类的对象来访问外部类的非static变量
            System.out.println(staticOuterField);
        }
    }
}

为什么只有成员内部类能加static,外部类不能加?
静态内部类的应用场景??

成员内部类 (非静态成员内部类)

  1. inner和outer有相同名称变量或方法时,默认使用的是谁的?
    inner的。
  2. 第一题中,如何调用outer的变量或方法?
外部类.this.成员变量
外部类.this.成员方法
  1. 如何创建一个inner对象?
    一般有以下两种:
public class OutClass {
 
    private InnerClass getInner() {
        return new InnerClass();
    }
 
    public class InnerClass{}
 
    public static void main(String... str) {
        OutClass out = new OutClass();
 
        InnerClass inner1 = out.getInner();
        InnerClass inner2 = out.new InnerCLass();
    }
}

参考:
添加链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值