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 小结:
- 我们上面说的内部类能够调用外部类的方法和属性,在静态内部类中就行了,因为静态内部类没有了指向外部类对象的引用。除非外部类中的方法或者属性也是静态的。这就回归到了static关键字的用法。
- 静态内部类能够直接被外部类给实例化,不需要使用外部类对象。
- 静态内部类中可以声明静态方法和静态变量,但是非静态内部类中就不可以声明静态方法和静态变量
以上是关于Java面向对象(OOP)--内部类(静态内部类)的主要内容,如果未能解决你的问题,请参考以下文章