静态内部类

       静态内部类就是用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+"心脏再跳动!";

本篇文章仅代表个人见解,如有错误,欢迎指正

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值