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

Java中的内部类,分为4种:

成员内部类;

静态内部类;

方法内部类;

匿名内部类。

本篇记录一下成员内部类的相关知识点。

1 成员内部类的定义和说明:

package com.oracleonlinux.innerclass;

public class Person {

    public int age;
    private String name;

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

    public Heart getHeart(){
//     这里,参考内部类说明的第6条。
        new Heart().temp=12;
        return new Heart();
    }

//    成员内部类
    /** 1内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化;
     *  2内部类的访问修饰符,public、private、protected、default都可以用。其意义遵循访问修饰符的访问权限;
     *  3内部类可以直接调用外部类的方法,如下,直接调用eat()方法;
     *  4内部类中的成员变量如果跟外部类相同,其有优先级,如下,age=12将优先;
     *  5可以使用外部类.this.同名成员属性的方式来,改变优先级。如:Person.this.age,则变为外部类的age优先内部类的age;
     *  6外部类访问内部类信息,需要内部类实例,无法直接访问。如:内部类定义的成员变量,temp,如果想在外部类的getHeart()方法中
     *  去访问的话,则需要new Heart().temp这种形式;
     *  7内部类编译后文件名为:外部类$内部类.class的格式
     *  8内部类如果有跟外部类同名的方法,那么在调用同名方法时。遵循的优先级跟第4点,同名成员变量保持一致。
     */
    class Heart{
        int age=12;
        int temp;
        public void eat(){
            System.out.println("内部类的eat()方法");
        }
        public String  beat(){
            Person.this.eat();
            return age+"岁的心脏在heartbeating";
        }
    }

}
 

2 测试类

com.oracleonlinux.innerclass;

public class TestPerson {

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

//获取成员内部类方式1:new 外部类名.new 内部类名
        Person.Heart heart=new Person().new Heart();
        System.out.println(heart.beat());

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


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

    }
}
 

3 执行结果

 人会吃东西
12岁的心脏在heartbeating
人会吃东西
12岁的心脏在heartbeating
人会吃东西
12岁的心脏在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>
*
*