Java面向对象(OOP)--内部类(静态内部类)

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面向对象(OOP)--内部类(静态内部类)相关的知识,希望对你有一定的参考价值。

1. 静态内部类

  • 看到名字就知道,使用你static修饰的内部类就叫静态内部类。
  • 既然提到了static,那我们就来复习一下它的用法:一般只修饰变量和方法,平常不可以修饰类,但是内部类却可以被static修饰。

static关键字的用法回顾:

  • static修饰成员变量:整个类的实例共享静态变量
  • static修饰方法:静态方法,只能够访问用static修饰的属性或方法,而非静态方法可以访问static修饰的方法或属性
  • 被static修饰了的成员变量和方法能直接被类名调用。
  • static不能修饰局部变量,切记,不要搞混淆了,static平常就用来修饰成员变量和方法。

1.1 静态内部类示例:

public class StaticInnerClassTest {
    private String name;
    private static int age;

    public void run() {
    }

    public static void go() {
    }


    //外部类访问静态内部类
    public void test() {
        StaticInnerClass sic = new StaticInnerClass(); //静态的内部类不需要依赖外部类,所以不用this
        sic.name = "tom";
        sic.test1("jack");
        StaticInnerClass.age = 10;
        StaticInnerClass.test2("xixi");
    }

    public static class StaticInnerClass {
        private String name;
        private static int age;

        public void test1(String name) {
            System.out.println(name);
            System.out.println(this.name);
            System.out.println(StaticInnerClass.age);
            System.out.println(StaticInnerClassTest.age);
            //System.out.println(StaticInnerClassTest.this.name);静态类不能访问非静态属性
            StaticInnerClassTest.go();
            //StaticInnerClassTest.this.run();静态类不能访问非静态方法
        }

        public static void test2(String name) {
            //只能访问自己和外部类的静态属性和方法
            System.out.println(name);
            //System.out.println(StaticInnerClassTest.this.name);静态方法不能 访问非静态属性
            StaticInnerClassTest.go();
            //StaticInnerClassTest.this.run();静态方法不能访问非静态方法
        }
    }
}

class Test {
    public static void main(String[] args) {
        new StaticInnerClassTest().test();
        System.out.println();
        // 调用静态内部类的非静态方法
        new StaticInnerClassTest.StaticInnerClass().test1("Test 01");
        System.out.println();
        // 调用静态内部类的静态方法
        StaticInnerClassTest.StaticInnerClass.test2("Test 02");
    }
}


1.2 小结:

  1. 我们上面说的内部类能够调用外部类的方法和属性,在静态内部类中就行了,因为静态内部类没有了指向外部类对象的引用。除非外部类中的方法或者属性也是静态的。这就回归到了static关键字的用法。
  2. 静态内部类能够直接被外部类给实例化,不需要使用外部类对象。
  3. 静态内部类中可以声明静态方法和静态变量,但是非静态内部类中就不可以声明静态方法和静态变量


以上是关于Java面向对象(OOP)--内部类(静态内部类)的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象(OOP)--内部类(成员内部类)

Java面向对象(OOP)--内部类(局部内部类)

面向对象oop

07_JavaSE之OOP--面向对象(内部类)

Java基础——面向对象(内部类)

Java基础语法09-面向对象下-内部类