码迷,mamicode.com
首页 > 编程语言 > 详细

Java内部类详解

时间:2018-06-11 02:16:03      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:pac   public   bsp   直接   inter   out   get   protected   执行   

成员内部类(声明在类内部且方法外的)1是外部类的一个成员:①可以有修饰符(4个)②static final ③可以调用外部类的属性、方法

                                                                     2具体类的特点:①abstract ②还可以在其内部定义属性、方法、构造器

局部内部类(声明在类的方法里)

内部类作用:

  •      实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明为private时,只有外部类可以访问内部类,很好地隐藏了内部类
  •      内部类可以继承(extends)或实现(implements)其他的类或接口,而不受外部类的影响
  •      内部类可以直接访问外部类的字段和方法,即使是用private修饰的,相反的,外部类不能直接访问内部类的成员

一、静态内部类:作为类的静态成员,存在于某个类的内部

     静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象。

静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员

package com.yyx.pratice;

public class TestInner {
    private String outerName = "outer";
    private static int id = 123;
    private Inner inner = new Inner();

    public static class Inner {
        public void print1() {
            System.out.println(id);
            // System.out.println(outerName);
        }

        public static void print2() {
            System.out.println(id);
        }
    }

    public void show() {
        inner.print1();
    }

    public static void main(String[] args) {
        TestInner testInner = new TestInner();
        testInner.show();
        TestInner.Inner.print2();
    }
}

二、成员内部类:作为类的成员,存在于某个类的内部

    成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员

package com.yyx.pratice;

public class TestInner {
    private String outerName = "outer";
    // 外部类无法直接访问内部类的成员,需要实例化内部类对象
    private Inner inner = new Inner();

    public class Inner {
        private String innerName = "inner";

        public void show() {
            System.out.println(outerName); // 可以直接访问外部类的成员
        }
    }

    public void show() {
        System.out.println(inner.innerName);
        inner.show();
    }

    public static void main(String[] args) {
        TestInner outer = new TestInner();
        outer.show();
        // 实例化内部类
        TestInner.Inner inner = outer.new Inner();
        inner.show();
    }
}

三、局部内部类:存在于某个方法的内部

    局部内部类只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。
    必须注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的

package com.yyx.pratice;

public class InnerClass {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.getPerson().eatRice();
    }
}

interface Person {
    public void eatRice();
}

class Student {
    public Person getPerson() {
        /*
         * 匿名内部类
         */
        return new Person() {

            @Override
            public void eatRice() {
                System.out.println("我会吃米饭!");

            }
        };
    }
}

 

Java内部类详解

标签:pac   public   bsp   直接   inter   out   get   protected   执行   

原文地址:https://www.cnblogs.com/xianya/p/9165019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!