Java 内部类基础知识梳理

作者: Android那些事儿 | 来源:发表于2016-11-27 22:16 被阅读81次

文章摘要
1、内部类按照类别可以分为:非静态成员内部类、局部内部类、静态成员内部类、匿名内部类。
2、非静态内部类相当于外部类的非静态成员属性以及方法,含有外部对象的引用。
3、非静态内部类不允许定义静态成员变量,但是可以存在静态常量。


一、内部类综述

1、内部类按照类别可以分为:非静态成员内部类、局部内部类、静态成员内部类、匿名内部类。
2、内部类编译结束后的class文件,以“外部类$内部类内部类.class”的形式出现。

内部类

3、内部类对象会保留一个外部对象的引用,即:Out.this。

二、非静态成员内部类。

1、非静态成员内部类:不带有关键字static,相当于外部类的内部属性以及方法的集合。
代码形式:

public class 外部类{

 class 内部类{//非静态内部类

 }

}

2、实例化方式:

public class 外部类 {
    class 内部类{
        public void display(){
            System.out.println("这是内部类。。");
        }
    }
    public static void main(String args[]){
        //1、非静态成员内部类的实例化方式
        外部类 Outer = new 外部类();
        内部类 Inner = Outer.new 内部类();//等同于:new 外部类().new 内部类();
        
        Inner.display();
    }
}

3、常见用法及其注意事项:
非静态内部类相当于外部类的非静态成员属性以及方法,含有外部对象的引用。
访问自己内部的成员属性。可以直接访问,也可以通过【内部类.this】或者【this】来代表内部类。

【外部类.this】可以代表外部类对象的引用。

public class 外部类 {
    private String name="外部类";//外部类name声明并实例化
    class 内部类{
        private String name="内部类";//内部类name声明并实例化
        public void display(){
            //直接访问内部类内部成员变量
            System.out.println("内部类描述1:"+name);
            //内部类.this或者this.name代表内部类自身
            System.out.println("内部类描述2:"+内部类.this.name);
            //外部类.this代表外部类的引用
            System.out.println("外部类描述:"+外部类.this.name);
        }
    }
    public static void main(String args[]){
        //1、非静态成员内部类的实例化方式
        外部类 Outer = new 外部类();
        内部类 Inner = Outer.new 内部类();
        
        Inner.display();
    }
}

输出:

内部类描述1:内部类
内部类描述2:内部类
外部类描述:外部类

c、外部类方法引用内部类对象以及方法

public class 外部类 {
    private String name="外部类";//外部类name声明并实例化
    
    public void display(){
        System.out.println("外部类描述:"+name);
        //
        内部类 inner = new 内部类();
        inner.display();
        System.out.println("内部类成员属性:"+inner.name);
    }

    class 内部类{
        private String name="内部类";//内部类name声明并实例化
        public void display(){
            //直接访问内部类内部成员变量
            System.out.println("内部类描述1:"+name);
            //内部类.this或者this.name代表内部类自身
            System.out.println("内部类描述2:"+内部类.this.name);
            //外部类.this代表外部类的引用
            System.out.println("外部类描述:"+外部类.this.name);
        }
    }
}

三、局部内部类

1、代码形式:

public class 外部类 {
    
    public void demoPartialClass(){
        class 局部内部类{
        }
    }
}

2、局部内部类的实例化:

public class 外部类 {
    public void demoPartialClass(final String name){
 class 局部内部类{
 }
 //1、局部内部类的实例化
 局部内部类 partialInnerClass = new 局部内部类();
    }
}

3、常见用法及注意事项
局部内部类中访问外部局部变量,变量必须是final的。

public void demoPartialClass(final String name){//必须是final修饰的
        final String discription = "这里演示局部内部类";
        class 局部内部类{
            public void display(){
                System.out.println("局部内部类描述:"+name);
            }
            public void work(){
                System.out.println("局部内部类工作:"+discription);
            }
 }
}

四、静态内部类

静态内部类相当于外部定义的类,类名前可以使用public、protected以及private等修饰。
1、代码形式:

public class 外部类 {
    
    /*public*/ static class 静态内部类{
        
    }

}

2、静态内部类的实例化

public class 外部类 {
    
    /*public*/ static class 静态内部类{
        
    }

}

静态内部类 static_ = new 静态内部类();

3、常见用法及注意事项
可以访问局部内部类中的非静态方法和属性,不能访问外部类的非静态成员方法和属性。

public class 外部类 {

    /*public*/ static class 静态内部类{
        private static String name="静态内部类";
        public void display() {
            System.out.println("静态内部类描述:" + name);
            //2、无法调用外部类的非静态属性、方法
//            System.out.println("外部类的非静态属性:"+外部类.this.name);//报错
//            System.out.println("外部类的非静态方法:"+外部类.this.display());//报错
        }
    }

}

五、匿名内部类

1、代码形式:

new 接口/类{
//add unimplemented methods
};

ps:不要忘记大括号最好的分号。

二、实例化:
匿名内部类只能实例化一个对象

public class 外部类 {
    public void demoAnnonymos() {
        new Object(){
            public String toString() {
                return super.toString();
            }
        };
    }
}

代码下载:http://download.csdn.net/detail/hailushijie/9688012

相关文章

  • Android 知识梳理目录 - 好吧,这是一个很"干

    一、Java 知识梳理 Java&Android 基础知识梳理(1) - 注解Java&Android 基础知识梳...

  • Java 内部类基础知识梳理

    文章摘要1、内部类按照类别可以分为:非静态成员内部类、局部内部类、静态成员内部类、匿名内部类。2、非静态内部类相当...

  • 明明白白Java内部类

    Java内部类一直是很多Java初学者迷惑的地方,今天我来系统地梳理一下Java内部类的相关知识点。 Java...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java基础知识干货2

    Java基础知识干货1传送门->http://www.jianshu.com/p/78fdfacf1868 内部类...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

网友评论

    本文标题:Java 内部类基础知识梳理

    本文链接:https://www.haomeiwen.com/subject/msbnpttx.html