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 ... 
随机推荐
- 开源DDD设计模式框架YMNNetCoreFrameWork第五篇-Swagger增加权限认证
			配置文件services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = " ... 
- 16 协程和www
			1.一个应用程序一般对应一个进程,一个进程一般有一个主线程,还有若干个辅助线程,线程之间是平行运行的,在线程里面可以开启协程,让程序在特定的时间内运行.2协程和线程的区别是:协程避免了无意义的调度,由 ... 
- selenium2Library无法启动chrome
			使用其他浏览器都没有影响,唯独chrome启动不起来,去掉IE-连接-局域网设置-自动检测设置就OK了 
- mybatis基础CURD的学习
			<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ... 
- 面向对象第一个特征-封装(Encapsulation)
			面向对象第一个特征-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述(Encapsulation) 1>.什么是封装 是指隐藏对 ... 
- 每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
			1.首先通过 Composer 包管理器安装 Passport: composer require laravel/passport 注:如果安装过程中提示需要更高版本的 Laravel:larave ... 
- silicon射频发射器 SI4010-C2-GSR
			Si4010是第一款系统级的自动天线调谐发射器,具有专利的调谐电路,可自动微调天线以达到最佳效果,以及恒定的输出功耗.PCB环形天线的制造公差和环境改变,将会引起发射频率的变化,从而可能导致天线的效率 ... 
- js运用sort对json 数组进行排序
			Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列.sort() 方法可以接受一个 方法为参数. sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组 ... 
- ssh and scp从远程服务器下载文件
			scp -r root@172.16.252.32:/home/files /home/files 下载目录 -r root是用户172.16.252.32是ip:/home/files 是你要 ... 
- MVC三层架构在各框架中的特征
			转一篇写得很棒的文章:https://my.oschina.net/win199176/blog/208171?p=7&temp=1495894148424 1.基于web开发中最原始的jsp ... 
