A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大蓝鲸Java 中级黑马   /  2019-7-12 12:28  /  630 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类
1.内部
2.类
简单来说,就是写在另一个类里面的那个类。
里面的这个类,我们就称之为内部类。

因为内部类所在的位置不同。
我们可以把他分为:成员内部类,局部内部类。

又可以把类有名字还是没有名字加以区别:匿名内部类


//熟悉
1,成员内部类
        a.会写
                就是把一个类,写在另一个类的里面的成员位置。
               
                class Outer{ //外部类
                        String number;

                        //也可以把成员内部类理解成外部类的一个成员。
                        class Inner{ //内部类
                                public void show(){
                                        System.out.println("成员内部类的方法");
                                }
                        }
                }

        b.会创建内部类的对象

                //来调用外部类的成员变量。
                String s = new Outer().number;

                //这个变量的类型是:
                //Outer这个类里面Inner的类型
                Outer.Inner oi= new Outer().new Inner();


        c.会调用内部类里面的方法
                oi.show();



//熟悉
2,局部内部类
        a.会写
                就是一个类写在另一个类的方法里面。

                class Outer{

                        public void method(){
                                class Inner{
                                        public void function(){
                                                System.out.println("局部内部类");
                                        }
                                }
                        }
                }



        b.会创建内部类的对象
                只能在方法内,且必须要在类的定义下面创建。

        c.会调用内部类里面的方法
                直接使用对象调用就可以了。


//上面的这两个在实际开发中,用的比较少。







//在实际开发中使用非常多
//且是后面lambda表达式的前提,所以必须要掌握。
3,匿名内部类

        核心思想:
                就是为了少写一个类而已。

        使用场景:
                如果一个接口或者一个抽象类的子类
                只需要使用一次,那么就可以使用匿名内部类。


案例:
public class Demo1 {
    public static void main(String[] args) {
        aaa(new Inter() {
            @Override
            public void method() {
                System.out.println("匿名内部类");
            }
        });
    }

    public static void aaa(Inter inter){
        inter.method();
    }
}

interface Inter {
    public abstract void method();
}


//如果我这个类只需要使用一次,那么还要定义一个类,就很复杂了。
class InterImpl implements Inter {

    @Override
    public void method() {
        System.out.println("方法");
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马