成员内部类以及局部内部类

Demo01:

package cn.dali.code22;
/*内部类:一个事物的内部包含另外一个事物,比如人包含一个心脏。心脏就是一个内部类,人就是外部类
    分类:成员内部类
         局部内部类(包含匿名内部类)
  成员内部类的使用:
        1.间接调用:通过创建外部类对象,调用外部类方法使用内部类

        2.直接调用,直接创建一个内部类对象
            格式:外部类名称.内部类名称 类名称 = new 外部类名称().new 内部类名称();

   注意:当内部类与外部类的成员变量重名的时候,想在内部类中调用外部类成员变量,格式为
         外部类.this.成员变量


  局部内部类使用:
        局部内部类是在外部类的成员方法当中,除了该成员方法,谁都不可以使用。
   注意:
        局部内部类访问所在的方法中的局部变量的时候,该变量一定要是有效final的。
        (也就是final类型变量,或者声明后没有改变过的)
        原因: 内部类的对象存活时间要比他所在的方法时间长。
*       */

public class Demo01 {
    public static void main(String[] args) {
        /*调用成员内部类的第一种方法,间接调用
         * 通过创建外部类对象,调用外部类方法使用内部类*/
        Person person = new Person();
        person.NewHeart();
        System.out.println("================");



        /*调用成员内部类第二种方法,直接调用
        * 直接创建一个内部类对象。*/
        Person.Heart heart = new Person().new Heart();
        System.out.println("我是"+heart.getName());
        heart.jump();
        System.out.println("===================");



        /*使用局部内部类*/
        person.Usehand();
    }
}

Person类:

package cn.dali.code22;

public class Person {
    public void Usehand() {
        int i =0;
        //i=1;  注意:局部内部类使用该方法内的局部变量时,这个变量必须是final的或者没有改变的。
        class Hand {//局部内部类
            String name = "我是手";

            public void Dazi() {
                System.out.println(i);
                System.out.println("我可以打字");

            }
        }
        Hand hand = new Hand();
        System.out.println(hand.name);
        hand.Dazi();
    }

    public void NewHeart() {
        Heart heart = new Heart();
        System.out.println("我是" + heart.name);
        heart.jump();
    }

    public class Heart {//成员内部类
        private String name = "心脏";

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void jump() {
            System.out.println("我在跳!");
        }

    }
}

猜你喜欢

转载自blog.csdn.net/chen404897439/article/details/91875645