java学习——内部类(二)
使用内部类
内部类一共有三种使用方法:
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学习——内部类(二)的更多相关文章
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- java学习之二维数组
java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...
- java学习(二)
学号 20189214 <Java程序设计>第二周学习总结 教材学习内容总结 java类 创建java对象需要类似的模板,即类(class) java对象也拥有属性和能够执行的动作. 属性 ...
- Java学习笔记二十:Java中的内部类
Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...
- 类与对象 - Java学习(二)
弄清楚类与对象的本质与基本特征,是进一步学习面向对象编程语言的基本要求.面向对象程序设计与面向过程程序设计在思维上存在着很大差别,改变一种思维方式并不是一件容易的事情. 一.面向对象程序设计 程序由对 ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- JAVA学习笔记--二
一.抽象类: 访问修饰符 abstract class 类名{ } 抽象类和普通类的区别: 1. 抽象类不能被实例化 2. 抽象类一般含有抽象方法 抽象方法:在抽象类中只有方法签名(方法声明),没有方 ...
- 数组排序、递归——(Java学习笔记二)
升序: 选择排序: 选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置 先出现最小值,最后出现最大值. public stat ...
- Java学习笔记二:数据类型II
GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一 Java中的数据类型 Java ...
随机推荐
- Android Studio SharedPreferences
Android 中最简单的数据存储方式 : SharedPreferences SharedPreferences 数据存储处理实际上时对一个个key——value 数据对的处理 使用SharedPr ...
- 090-PHP数组过滤函数array_filter
<?php function odd($x){ //定义过滤偶数的函数 if($x%2==1) return TRUE; } function even($x){ //定义过滤奇数的函数 if( ...
- C++使用 scanf函数
最近看了下C++,有些地方和c语言 还是不太一样的,当我在做输入一个数字的时候发现了错误.. 所以在使用scanf()的时候需要加下面这段在头文件 顶部: #define _CRT_SECURE_N ...
- HDU 4952 Number Transformation 多校8 机智数学
哎.这个题想了好久,状态不对啊...一个大家都出的题..当时想到肯定是可以有什么规律来暴力,不用算到10的10次方 对于某个k,x.从1到k循环,每次求一个新的x,这个x要大于等于原x,并且要是i的倍 ...
- MySQL过程和游标
BEGIN DECLARE f_leastCount INT DEFAULT 100; DECLARE f_ratio FLOAT DEFAULT 0.8; DECLARE i_channel VAR ...
- 实验吧-密码学-Fair-Play(Playfair解密)
这个题是Playfair解密. Playfair解密算法首先将密钥填写在一个5*5的矩阵中(去Q留Z),矩阵中其它未用到的字母按顺序填在矩阵剩余位置中,根据替换矩阵由密文得到明文. 对密文解密规则如下 ...
- oracle获取排序第一的数据
一:按照某字段排序(时间,总数等),获取第一条 select a.* FROM ( select * from ( select t.*,row_number() over(partition by ...
- redis十-对快照模式分析
复制自:http://www.cnblogs.com/huangxincheng/p/5010795.html 一:快照模式 或许在用Redis之初的时候,就听说过redis有两种持久化模式,第一种是 ...
- vue学习(九)对象变更检测注意事项
Vue不能检测对象属性的添加和删除,要是必须这么做的话 需要使用 vue.$set() <body> <div id="app"> <h3> { ...
- EUI库 - 9 - 数据集合 - 数组集合
ArrayCollection 当数组内的数据被修改了(增删改),组件能有效的获知 myCollection.addEventListener(eui.CollectionEvent.COLLE ...