学习笔记,仅供参考


文章目录

  • 面向对象
    • 内部类
      • 内部类概述和访问特点
      • 成员内部类私有使用
      • 静态成员内部内

面向对象

内部类

内部类概述和访问特点

  • 内部类概述

    • 在类中定义类,就叫做内部类
  • 内部类访问特点
    • 内部类可以直接访问外部类的成员,包括私有成员。
    • 外部类要访问内部类的成员,必须创建对象。
    • 创建内部类对象的格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  • 举个例子
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)--内部类概述相关推荐

  1. 第三次学JAVA再学不好就吃翔(part107)--字符流的拷贝

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流的拷贝 拷贝纯文本文件 注意事项 自定义字符数组的拷贝 IO流 字符流的拷贝 拷贝纯文本文件 zzz.txt: 安徽财经大学 JAVA代码: pa ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 第三次学JAVA再学不好就吃翔(part46)--Scanner类

    学习笔记,仅供参考 文章目录 Scanner类 Scanner获取数据出现的问题 Scanner类 概述 Scanner是在java.util包下的一个类,使用该类时我们需要导包.这个类被final修 ...

  4. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  5. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类

    学习笔记,仅供参考,有错必纠 IO流 LineNumberReader类 该类继承自java.io.BufferedReader,该类可以跟踪行号的缓冲字符输入流.此类定义了方法 setLineNum ...

  6. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  7. 第三次学JAVA再学不好就吃翔(part7)--基础语法之运算符

    学习笔记,仅供参考 文章目录 JAVA基础语法 运算符 算数运算符 算术运算符 ++和-- 赋值运算符 关系运算符 JAVA基础语法 运算符 什么是运算符 就是对常量和变量进行操作的符号. 运算符的分 ...

  8. 第三次学JAVA再学不好就吃翔(part115)--多线程

    学习笔记,仅供参考,有错必纠 文章目录 多线程 多线程引入 什么是线程 多线程并行和并发的区别 Java程序运行原理 多线程的实现方式 多线程实现的方式1 多线程程序实现的方式2 以上两种实现方式的区 ...

  9. 第三次学JAVA再学不好就吃翔(part113)--对象操作流

    学习笔记,仅供参考,有错必纠 对象操作流 对象操作流可以将一个对象写出, 或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作. 举个例子 先构造一个Role类: package com.gu ...

最新文章

  1. Geoffrey Hinton 等6位图灵奖得主和100多位专家邀请您共话人工智能下一个十年
  2. 集合视图UICollectionView 介绍及其示例程序
  3. scikit-learn一般实例之一:绘制交叉验证预测
  4. 12bit灰度图像映射到8bit显示及python 实现
  5. python 矩阵合并_numpy 的矩阵合并与分割
  6. 受保护的属性无法直接读取
  7. 三分钟撸完前后端crypto-js加解密,你学废了吗?
  8. linux切换至root权限,【linux】sudo su切换到root权限
  9. java解决跨域 多个号_java-解决跨域问题
  10. C++11中容器迭代器操作总结
  11. axios上传图片到php报500,vue项目中使用axios上传图片等文件
  12. 新写的一个商品比较控件CompareGrid,没有做设计视图。有兴趣的联络我。公布源码。...
  13. 遗传算法原理案例及MATLAB代码
  14. 全自动采集程序 php,快看CMS全自动采集影视程序
  15. 自由曲面透镜设计matlab,led自由曲面准直透镜的优化设计方法.pdf
  16. linux配置tp路由器,手把手图解教程tplink r402m路由器配置
  17. 蓝牙渗透测试过程:部分工具使用方法
  18. Robot Framework自定义测试库
  19. 菜鸟吐槽一下hao123
  20. 445端口telnet不通经验总结

热门文章

  1. The requested URL was not found on the server
  2. 2018年工业机器人销量排位_2020年全球工业机器人现状与竞争情况 中国为全球最大供应国...
  3. 济南市软件测试工程师的工资水平,软件测试工程师工资怎么样?高吗?
  4. Linux中修改weblogic默认IP,Weblogic 12c ip 地址改变如何配置
  5. Flutter:尝试撸一个具有惯性跟阻力的旋转控件或用传感器控制其旋转
  6. 使用RAID与LVM磁盘阵列技术。
  7. 云计算岗位40个面试题
  8. Docker安装Python3.5
  9. 物联网有哪些技术 物联网跟云计算人工智能有什么关系
  10. linux下通过rsync+inotify 实现数据实时备份(远程容灾备份系统)