静态内部类就是用saitic关键字修饰的内部类类,是与类共享的,所以静态内部类的对象不依赖于外部类的对象,可直接创建。
我们先创建一个类,在其中创建一个静态内部类。
package people;
//外部类
public class Person {
int age;
static String name="小明";
public void eat(){
System.out.println("我是Person中的非静态方法");
}
public static void run(){
System.out.println("我是Person中的静态方法");
}
public Heart getHeart(){
new Heart().em=20;
return new Heart();
}
//静态内部类
static class Heart{
static int age=13;
int em=10;
public static void say(){
System.out.println("Hello"+name);
}
public String beat(){
//通过对象实例来调用非静态成员
new Person().eat();
//可以直接调用外部类的静态成员
run();
//若调用外部类的同名熟悉,需要通过对象实例来调用
//格式:new 外部类名().属性名;如new Person().age
return age+"心脏再跳动!";
}
}
}
可以发现在静态内部类中我们如果调用外部类的静态方法或者静态属性,可直接调用。
在调用非静态的方法和属性时,则需要通过对象实例来调用:new 外部类().属性名
接下来在创建一个测试类。
package people;
//将内部类实例化
public class PeopleTest {
public static void main(String[] args) {
Person lili=new Person();
lili.age=12;
//获取静态内部类对象实例
Person.Heart myHeat=new Person.Heart();
System.out.println(myHeat.beat());
Person.Heart.say();
}
}
可以发现静态内部类对象实例时,不需要依赖外部类对象。可以通过 外部类.内部类.静态成员; 来访问内部类中的静态成员。
运行结果:
我是Person中的非静态方法
我是Person中的静态方法
13心脏再跳动!
Hello小明
这里输出 13心脏再跳动 是因为虽然在上面声明lili.age=12,但是在静态内部类中有同名的age属性并且赋值为13,在静态内部类Heart中beat()方法的返回值默认为静态内部类的age,若想返回值为测试类中lili.age=12,将静态内部类中的返回语句修改为
return new Person().age+"心脏再跳动!";
本篇文章仅代表个人见解,如有错误,欢迎指正