admin/ 九月 25, 2019/ Java/ 0 comments

在前面一篇笔记里简单记录了Java内部类的成员内部类。这篇笔记里,记录一下静态内部类。

1 内部类的定义文件

package com.oracleonlinux.innerclass;

public class Person {

    public  int age=15;
    private String name;

    public void eat(){
        System.out.println("人会吃东西");
    }

//  这个外部类的方法,其功能只是获取内部类的一个对象实例
    public Heart getHeart(){
//     这里,参考内部类说明的第6条。
//        new Heart().temp=12;
        return new Heart();
    }

    /** 静态内部类
     * 1静态内部类中,只能访问外部类的静态成员,如果需要调用外部类的非静态成员,则需要通过外部类的对象实例来调用
     *  如下调用外部类的eat()方法;
     * 2创建静态内部类对象实例时,可以不再依赖于外部类对象,而是可以直接通过 new 外部类名.静态内部类()的方式;
     * 3内部类和外部类的成员属性相同时:
     *  如果需要访问外部类的静态成员属性时,则直接通过外部类名.静态成员属性名来直接访问;
     *  如果需要访问外部类的非静态成员属性时,则需要通过new 外部类名().非静态成员属性名来访问;
     */
    public static class Heart{
        static int age=20;
        public String beat(){
            new Person().eat();
//            如下,如果Person类的age属性是static,则直接写Person.age。
            return new Person().age+"静态内部类方法,heartbeating.";
        }
    }

}

2测试内部类文件

packagecom.oracleonlinux.innerclass;

public class TestPerson {

    public static void main(String[] args) {
        Person person=new Person();

//获取静态内部类方式:new 外部类名.内部类名()
//     说白了就是通过内部类的构造方法来构造一个实例变量时,在前面加了一个外部类名作为限定符而已。
        Person.Heart heart=new Person.Heart();
        System.out.println(heart.beat());

        heart.age=10;
////       方式2,这里的person引用,等价于new Person();
//        Person.Heart heart1=person.new Heart();
        System.out.println(heart.beat());


//        方式3,通过外部类的获取方法,来获取内部类的对象.通常就是这么干的
        System.out.println(person.getHeart().beat());

    }
}

3 执行结果:

人会吃东西
15静态内部类方法,heartbeating.
人会吃东西
15静态内部类方法,heartbeating.

 

顶一下
(0)
100%
踩一下
(0)
100%
Share this Post

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*