第三次学JAVA再学不好就吃翔(part42)--内部类概述
学习笔记,仅供参考
文章目录
- 面向对象
- 内部类
- 内部类概述和访问特点
- 成员内部类私有使用
- 静态成员内部内
面向对象
内部类
内部类概述和访问特点
- 内部类概述
- 在类中定义类,就叫做内部类
- 内部类访问特点
- 内部类可以直接访问外部类的成员,包括私有成员。
- 外部类要访问内部类的成员,必须创建对象。
- 创建内部类对象的格式:
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
- 举个例子
class InnerTest1 {public static void main(String[] args) {Outer.Inner oi = new Outer().new Inner();//创建内部类对象oi.print();}
}class Outer {private int num = 10;class Inner {public void print() {System.out.println("Inner print");System.out.println(num);}}
}
输出:
Inner print
10
成员内部类私有使用
当我们把内部类私有后,我们就不可以通过上面的方式去创建内部类的对象了:
class InnerTest1 {public static void main(String[] args) {Outer.Inner oi = new Outer().new Inner();//创建内部类对象oi.print();}
}class Outer {private int num = 10;private class Inner {public void print() {System.out.println("Inner print");System.out.println(num);}}
}
报错:
---------- javac ----------
InnerTest1.java:3: 错误: Outer.Inner可以在Outer中访问privateOuter.Inner oi = new Outer().new Inner();^
InnerTest1.java:3: 错误: Outer.Inner可以在Outer中访问privateOuter.Inner oi = new Outer().new Inner();^
2 个错误Output completed (2 sec consumed) - Normal Termination
这时,为了访问Inner内部类的成员,我们可以通过在Outer类中创建方法来实现:
class InnerTest1 {public static void main(String[] args) {Outer o = new Outer();//创建内部类对象o.method();}
}class Outer {private int num = 10;private class Inner {public void print() {System.out.println("Inner print");System.out.println(num);}}public void method() {Inner i = new Inner();i.print();}
}
输出:
Inner print
10
静态成员内部内
为了访问Outer类中的静态内部类Inner,我们可以写如下代码:
class InnerTest1 {public static void main(String[] args) {Outer.Inner oi = new Outer.Inner();oi.print();}
}class Outer {static class Inner {public void print() {System.out.println("Inner print");}}
}
输出:
Inner print
可以看到,我们在创建内部类Inner对象的时候写的是new Outer.Inner()
,这样写可能不太好理解,如果我们这样写Outer.new Inner()
,是不是能够更好的理解呢?
因为Inner是静态的,所以我们可以用Outer直接调用(Outer.
),又因为Inner有非静态的方法(print()
),我们需要通过Inner的对象才能调用该方法,所以我们需要创建其对象(new Inner()
)。
虽然这样的写法比较好理解,但是JAVA不允许我们这样书写,如果这样写了,编译时就会报错!
第三次学JAVA再学不好就吃翔(part42)--内部类概述相关推荐
- 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...
- 第三次学JAVA再学不好就吃翔(part106)--字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...
- 第三次学JAVA再学不好就吃翔(part46)--Scanner类
学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
- 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...
- 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流
学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...
- 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符
学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...
- 第三次学JAVA再学不好就吃翔(part115)--多线程
学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...
- 第三次学JAVA再学不好就吃翔(part113)--对象操作流
学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...
最新文章
- Geoffrey Hinton 等6位图灵奖得主和100多位专家邀请您共话人工智能下一个十年
- 集合视图UICollectionView 介绍及其示例程序
- scikit-learn一般实例之一:绘制交叉验证预测
- 12bit灰度图像映射到8bit显示及python 实现
- python 矩阵合并_numpy 的矩阵合并与分割
- 受保护的属性无法直接读取
- 三分钟撸完前后端crypto-js加解密,你学废了吗?
- linux切换至root权限,【linux】sudo su切换到root权限
- java解决跨域 多个号_java-解决跨域问题
- C++11中容器迭代器操作总结
- axios上传图片到php报500,vue项目中使用axios上传图片等文件
- 新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
- 遗传算法原理案例及MATLAB代码
- 全自动采集程序 php,快看CMS全自动采集影视程序
- 自由曲面透镜设计matlab,led自由曲面准直透镜的优化设计方法.pdf
- linux配置tp路由器,手把手图解教程tplink r402m路由器配置
- 蓝牙渗透测试过程:部分工具使用方法
- Robot Framework自定义测试库
- 菜鸟吐槽一下hao123
- 445端口telnet不通经验总结
热门文章
- The requested URL was not found on the server
- 2018年工业机器人销量排位_2020年全球工业机器人现状与竞争情况 中国为全球最大供应国...
- 济南市软件测试工程师的工资水平,软件测试工程师工资怎么样?高吗?
- Linux中修改weblogic默认IP,Weblogic 12c ip 地址改变如何配置
- Flutter:尝试撸一个具有惯性跟阻力的旋转控件或用传感器控制其旋转
- 使用RAID与LVM磁盘阵列技术。
- 云计算岗位40个面试题
- Docker安装Python3.5
- 物联网有哪些技术 物联网跟云计算人工智能有什么关系
- linux下通过rsync+inotify 实现数据实时备份(远程容灾备份系统)