使用内部类

内部类一共有三种使用方法:

1.在外部类中使用内部类

在外部类中使用内部类,与平常使用内部类没有区别,可以直接通过内部类的类名来定义变量,通过new调用内部类的构造方法来创建实例。

唯一的区别是,不要再外部类的静态成员中使用非静态内部类,因为静态成员是不能访问非静态成员的。

2.在外部类以外使用非静态内部类

  如果希望再外部类以外使用内部类(包括静态内部类和非静态内部类),则内部类不能使用private来修饰,private修饰的内部类只能再外部类内部使用。对于其他修饰符的内部类,则只能控制符对应的访问限权中使用

*省略修饰符的内部类,只能被与外部类同一包中的类使用。

  *使用protected的内部类,只能被与外部类处于同一包中的类和外部类的子类访问。

  *使用public修饰的内部类,可以在任何地方使用。

  语法(包括静态和非静态)

   OutClass.InnerClass varName

  在外部类以外使用内部类是,完整的类名应该是OutClass.InnerClass。如果外部类前面还有包的话,则应该增加包名。

package cn.it.demo01;

class Out {
// 定义一个内部类,不使用访问修饰符
class In {
public In(String msg) {
System.out.println(msg);
}
}
} public class CreateInnerInstance {
public static void main(String[] args) {
Out.In in = new Out().new In("测试信息"); /*
* 以上代码可改为如下三行代码 Out out=new Out(); Out.In in; in=out.new In("测试信息");
*/
}
}

注意:如果需要在外部类以外的地方使用非静态内部类,非静态内部类的构造器必须使用外部类 的实例对象来调用。

3.在外部类以外使用静态内部类

  因为静态内部类是外部类相关的,因此创建静态内部类对象时无需创建外部类对象,在外部类以外的地方使用创建静态内部类实例的语法如下:

  new OuterClass.InnerConstrutor()

package cn.it.demo01;

class StaticOut {
// 定义一个静态内部类
// 既同一个包中的类才能访问此静态内部类
static class StaticIn {
public StaticIn() {
System.out.println("静态内部类的构造器");
}
}
} public class CreateStaticInnerstance {
public static void main(String[] args) {
StaticOut.StaticIn in = new StaticOut.StaticIn();
} }

  从上面的两个例子可以看出,在外部类以外的地方使用静态内部类和非静态内部类的语法差不多,不过,静态内部类只需使用外部类的类名即可,而非静态内部类必须时用外部类的实例对象来调用构造器。

java学习——内部类(二)的更多相关文章

  1. Java学习--内部类(一)

    Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...

  2. java学习之二维数组

    java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...

  3. java学习(二)

    学号 20189214 <Java程序设计>第二周学习总结 教材学习内容总结 java类 创建java对象需要类似的模板,即类(class) java对象也拥有属性和能够执行的动作. 属性 ...

  4. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  5. 类与对象 - Java学习(二)

    弄清楚类与对象的本质与基本特征,是进一步学习面向对象编程语言的基本要求.面向对象程序设计与面向过程程序设计在思维上存在着很大差别,改变一种思维方式并不是一件容易的事情. 一.面向对象程序设计 程序由对 ...

  6. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  7. JAVA学习笔记--二

    一.抽象类: 访问修饰符 abstract class 类名{ } 抽象类和普通类的区别: 1. 抽象类不能被实例化 2. 抽象类一般含有抽象方法 抽象方法:在抽象类中只有方法签名(方法声明),没有方 ...

  8. 数组排序、递归——(Java学习笔记二)

    升序:      选择排序:         选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置         先出现最小值,最后出现最大值. public stat ...

  9. Java学习笔记二:数据类型II

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一  Java中的数据类型 Java ...

随机推荐

  1. msf中arp_sweep使用报错:usbmon1:ERROR while getting interface flags:no such device

    在许多的工具使用中,会出现很多的错误,要养成先思考再去寻找帮助的习惯 在用use命令使用arp_sweep模块的时候爆出错误:usbmon1:ERROR while getting interface ...

  2. Sublime 一些常用快捷键

    Sublime插件安装和使用-----------------------------最常用的1.新建文件-输入"html:xt"后 按"Ctrl+E键"或 & ...

  3. (二)requests模块

    一 requests模块 概念: python中原生的基于网络请求的模块,模拟浏览器进行请求发送,获取页面数据 安装: pip install requests 二 requests使用的步骤 1 指 ...

  4. jar类库加载顺序

    当我们启动一个tomcat的服务的时候,jar包和claess文件加载顺序: 1. $java_home/lib 目录下的java核心api 2. $java_home/lib/ext 目录下的jav ...

  5. 【LeetCode】509. 斐波那契数

    题目 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列.该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,   F(1) = 1 F(N) = ...

  6. HDU - 6025 Coprime Sequence(前缀gcd+后缀gcd)

    题意:去除数列中的一个数字,使去除后数列中所有数字的gcd尽可能大. 分析:这个题所谓的Coprime Sequence,就是个例子而已嘛,题目中没有任何语句说明给定的数列所有数字gcd一定为1→_→ ...

  7. python matplotlib给图中的点加标签

    在写论文用到matplotlib画散点图,想着如果能把每个点对应的ID打在点的旁边就好了,经过一番搜索,最后找到了方法. 首先是打点,先把所有的点画好,举例如下: p1 = ax.scatter(X[ ...

  8. vnpy交易学习接口(2)

    #来源于github下载vnpy版本  20180413 11.多投资标的情况下,该如何修改? 10.stop和limit报单有什么区别呢? 在交易时用得最多的是二类定单,第一类是市价单(Market ...

  9. 19 01 15 js 尺寸相关 滚动事件

    尺寸相关.滚动事件 1.获取和设置元素的尺寸 width().height() 获取元素width和height innerWidth().innerHeight() 包括padding的width和 ...

  10. 寒假day18

    今天完成了人才动态模块的数据爬取