`

内部类小结

 
阅读更多
https://mp.weixin.qq.com/s/hErv4X9Whl_Juq8-TDhzdg

什么我们需要使用内部类了?



内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。

内部类可以对同一包中的其他类隐藏起来。

当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较快捷。

内部类所实现得到功能使用外部类同样可以使用,只是在特定场景使用内部更加方便。比如:有时候一个类只需要在一处代码中使用一次,其他位置不会用到这个类,这时使用匿名内部类来解决,代码更加简洁。



01、成员内部类



成员内部类是最普通常见的内部类,它常定义于另外一个类的内部。如代码1所示。

1

public class Outter {

    private String name = "Java敲黑板";

    private static int age = 1;


    //成员内部类的定义

    class inner{

public void print(){

    System.out.println("name: "

            + name + ",age:" + age);

    }

}



public static void main(String[] args){

    //编译错误

    //inner in = new inner();



    //编译错误

    //inner in = new Outter.inner();



    //成员内部的正确打开方式

    Outter out = new Outter();

    inner in = out.new inner();

    in.print();

    }

}



敲黑板

成员内部类可以无条件的访问外部内的所有成员(包括private、static等)

外部内如果要访问内部类的成员,必须先创建一个成员内部类的对象,再通过这个对象引用来访问。



02、局部内部类



局部内部类是定义在一个方法或者一个作用域里面的类。如代码2所示。



2

public void outPrint(){

    //局部内部类定义在一个方法函数中

    class inner{

public void print(){

    System.out.println("name: "

    + name + ",age:" + age);

    }

}



//定义了局部内部类的对象引用

inner in = new inner();

//利用对象引用访问方法

in.print();

}



敲黑板

局部内部类和成员内部类的区别在于,前者作用域仅局限于方法内。

局部内部类有一个优势,即对外部世界可以完全地隐藏起来。

局部内部类不能用public、protected、private以及static修饰符的。



03、匿名内部类



匿名内部类是只需要为内部类建立一个对象,且不用为该类指定一个类名。如代码3所示。匿名内部类可用于以下业务场景:

只用到类的一个实例;

类在定义后马上用到;

类非常小(比如类代码在10行以下)。



3

public class ListenerTest {

    public interface MouseListener{

        public void onMouseClick();

    }



    public static void main(String[] args){

//定义一个匿名内部类

MouseListener m = new MouseListener(){

    @Override

    public void onMouseClick() {

System.out.println("Mouse clicked!");

    }

};

//调用方法

m.onMouseClick();

    }

}



敲黑板

由于匿名内部类没有名称,因此在创建匿名内部类对象时,new运算符后是超类或接口的名称,其后面的{}内部为匿名类的定义。

匿名类对象的创建与匿名内部类的定义是在一起完成的。



04、静态内部类



静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。如代码4所示。



4


public class Outter1 {

    //定义静态内部类

    static class innner{

public void print(){

    System.out.println("Hello world!");

}

    }



    public static void main(String[] args) {

//编译错误

//inner in = new inner();



Outter1 out = new Outter1();



//编译错误

//inner in1 = new out.inner();



//静态内部类的正确打开方法

innner in2 = new Outter1.innner();

in2.print();

    }

}



敲黑板

当内部类不需要访问外围类对象的时候,应该使用静态内部类。

静态内部类,只能访问外部类的静态成员。
分享到:
评论

相关推荐

    Java中的匿名内部类小结

    java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下

    Java内部类_动力节点Java学院整理

    内部类是指在一个外部类的内部再定义一个类。下面通过本文给大家java内部类的使用小结,需要的朋友参考下吧

    21天学通Java-由浅入深

    245 12.3.3 在外部类外访问静态内部类 246 12.4 匿名内部类 247 12.4.1 创建匿名内部类 247 12.4.2 匿名内部类的初始化 249 12.5 综合练习 250 12.6 小结 250 12.7 习题 250 第13章 多线程(精彩视频:55分钟) 252 ...

    (超赞)JAVA精华之--深入JAVA API

    1.2 深入理解嵌套类和内部类 1.2.1 什么是嵌套类及内部类? 1.2.2 静态嵌套类 1.2.3 在外部类中定义内部类 1.2.4 在方法中定义内部类 1.2.5 匿名内部类 1.2.6 内部类使用的其它的问题 1.3 文件和流 1.3.1 什么是数据...

    javaSE代码实例

    1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 ...

    JAVA SE学习精华集锦

    1.2 深入理解嵌套类和内部类 47 1.2.1 什么是嵌套类及内部类? 47 1.2.2 静态嵌套类 48 1.2.3 在外部类中定义内部类 48 1.2.4 在方法中定义内部类 49 1.2.5 匿名内部类 49 1.2.6 内部类使用的其它的问题 50 1.3 文件...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    6.3 小结:Java其实是个类和对象的世界 152 6.4 习题 153 第7章 Java中的方法——给汽车丰富多彩的功能 154 教学视频:2小时55分钟 7.1 方法:让汽车动开动 154 7.1.1 引出问题:开动汽车 154 7.1.2 那么,...

    零点起航Delphi7基础教程源码

    自己购买的教材 零点起航Delphi7基础教程源码 Delphi7是Inprise公司推出的面向对象的可视化编程语言,它提供...第13章 网络编程技术 13.1 网络基础知识 13.2 TCP/IP编程 13.3 使用网络函数编程 13.4 小结 参考文献

    Java语言的科学与艺术 斯坦福大学经典教材

    10.11 编程练习 第11章 数组与ArrayList类 11.1 数组简介 11.2 数组的内部表示法 11.3 数组作为参数传递 11.4 使用数组制作表格 11.5 数组初始化 11.6 多维数组 11.7 图像处理 11.8 ArrayList类 11.9 小结 ...

    Java语言的科学与艺术(国外计算机科学经典教材)

     1.8 小结  1.9 复习题 第2章 编程示例  2.1 “Hello world”程序  2.2 编程过程的观点  2.3 两数相加的程序  2.4 编程习语和模式  2.5 类和对象  2.6 图形程序  2.7 小结  2.8 复习题  2.9 编程练习 第3...

    Java典型模块

    30.3 象棋游戏项目——规则的内部类 30.3.1 实现卒移动和吃的方法 30.3.2 实现炮、车移动和吃的方法 30.3.3 实现马移动和吃的方法 30.3.4 实现象移动和吃的方法 30.3.5 实现士移动和吃的方法 30.3.6 实现将移动和吃...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    Java完美编程(第3版).pdf

    本书是为全英文版本。 ...第13章 借口和内部类 第14章 泛型和arraylist类 第15章 链式数据结构 第16章 稽核,映射和迭代器 第17章 初探swing  第18章 深入swing 第19章 java的发展永无止境

    突破程序员基本功的16课.part2

    1.3 小结 第2课 对象与内存控制 2.1 实例变量和类变量 2.1.1 实例变量和类变量的属性 2.1.2 实例变量的初始化时机 2.1.3 类变量的初始化时机 2.2 父类构造器 2.2.1 隐式调用和显式调用 2.2.2 访问子类对象...

    小程序绑定用户方案优化小结

    在做过一系列小程序之后,对小程序的登陆鉴权的流程也有一定的理解,类似于 B 端小程序自不必说,要...之前在上海经常使用,价格和优惠都非常不错,这类小程序属于线下功能类小程序,内部有抽奖,付款等一系列功能。

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    1.7 小结 第2章 数据、变量和计算 2.1 C++程序结构 2.1.1 程序注释 2.1.2 #include指令——头文件 2.1.3 命名空间和using声明 2.1.4 main()函数 2.1.5 程序语句 2.1.6 空白 2.1.7 语句块 2.1.8 自动生成的控制台程序...

Global site tag (gtag.js) - Google Analytics