Java 类的内部成员之五:内部类
1 package com.bytezreo.innerclass;
2
3 /**
4 *
5 * @Description 类的内部成员之五:内部类
6 * @author Bytezero·zhenglei! Email:420498246@qq.com
7 * @version
8 * @date 上午8:56:44
9 * @ 1.Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B成为外部类
10 *
11 * 2.内部类的分类:成员内部类(静态,非静态) vs 局部内部类(方法内 代码块内 构造器内)
12 *
13 * 3.成员内部类:
14 * 一方面,作为外部类的成员:
15 * >调用外部类的结构
16 * >可以被 static 修饰
17 * >可以被 四种不同的权限修饰
18 *
19 *
20 *
21 * 另一方面:作为一个类:
22 * >类内可以定义属性,方法,构造器等
23 * >可以用final修饰,表示此类不能被继承,言外之意就是不适用final,可以被继承
24 * >可以被abstract修饰,此类不能被实例化
25 *
26 *
27 * 4.关注如下的 3 个 问题
28 * 4.1 如何实例化成员内部类的对象
29 *
30 * 4.2 如何在成员内部类中区分调用外部类的结构
31 *
32 * 4.3 开发中局部内部类的使用 见 InnerClassTest2.java
33 *
34 *
35 *
36 */
37 public class InnerClassTest {
38 public static void main(String[] args) {
39
40 //创建内部类的 Dog 的实例化(静态成员内部类):
41 Person.Dog dog = new Person.Dog();
42 dog.show();
43
44 //创建内部类的 Bird 的实例化(非静态成员内部类):
45 //Person.Bird bird = new Person.Bird(); //不可以这样
46 Person p =new Person();
47 Person.Bird bird = p.new Bird();
48 bird.sing();
49 bird.display("鹦鹉");
50
51 }
52 }
53
54 class Person{
55
56 String name = "外部类----小明";
57 int age = 12;
58
59 public void eat() {
60
61 System.out.println("人吃饭");
62 }
63
64
65
66 //静态成员内部类
67 static class Dog{
68 String name;
69 int age;
70
71 public void show() {
72 System.out.println("忠犬八公");
73 //eat(); //静态里不允许调用 非静态的方法
74
75 }
76
77
78
79 }
80
81 //非静态成员内部类
82 class Bird{
83 String name = "内部类----小小鸟";
84
85 public Bird() {
86
87 }
88 public void sing() {
89
90 System.out.println("我是一个小小鸟");
91 //调用外部类的方法
92 eat(); //省略了 Person.this.eat();
93 Person.this.eat();
94
95 System.out.println(age); //内部类的
96
97
98
99 }
100
101 public void display(String name) {
102
103 System.out.println(name); //方法的形参
104 System.out.println(this.name); //此类的属性--内部类属性
105 System.out.println(Person.this.name); //Person类的属性 --外部类的属性
106
107 }
108
109
110 }
111
112
113 public void method() {
114
115 //局部内部类
116 class AA{
117
118
119 }
120
121 }
122
123 //代码块内
124 {
125
126 //局部内部类
127 class BB{
128
129
130 }
131 }
132
133
134 //构造器里面
135 public Person() {
136 //局部内部类
137 class CC{
138
139
140 }
141
142 }
143
144
145
146 }

package com.bytezreo.innerclass;
public class InnerClassTest2 {
public void method() {
//局部内部类
class AA{
}
}
//返回一个实现Comparable接口的类的对象
public Comparable getComparable() {
// //创建一个实现了Comparable接口的类:局部内部类
// //方式一:
// class MyComparable implements Comparable{
//
// @Override
// public int compareTo(Object o) {
//
// return 0;
// }
//
// }
//
// return new MyComparable();
//方式二
return new Comparable() {
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
return 0;
}
};
}
}
Java 类的内部成员之五:内部类的更多相关文章
- 假如java类里的成员变量是自身的对象
假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了. 不过我想的肯定是错的,因为很多类的成员变量是自身对象,并且绝对无错,举个例子: Class A{ pr ...
- 【基础】java类的各种成员初始化顺序
父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序 前言: 普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出 ...
- java类里的成员变量是自身的对象问题
今晚看单例模式饿汉时想到一个问题:假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了.于是上网搜索了下,哈哈,果然有人早就思考过这个问题了,站在巨人的肩膀上 ...
- 测试 Java 类的非公有成员变量和方法
引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...
- java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...
- 【Java.Regex】使用正则表达式查找一个Java类中的成员函数
代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; imp ...
- 7.1 java 类、(成员)变量、(成员)方法
/* * 面向对象思想: * 面向对象是基于面向过程的编程思想. * * 面向过程:强调的是每一个功能的步骤 * 面向对象:强调的是对象,然后由对象去调用功能 * * 面向对象的思想特点: * A:是 ...
- 一道关于java 类初始化 成员初始化的笔试题的解析
代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new ...
- java 类中的细节
java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...
- 学习笔记 Java类的封装、继承和多态 2014.7.10
1.问题:toString()没搞懂? int a = 1; Integer aa = new Integer(a); //这是实现的过程 System.out.println("Hello ...
随机推荐
- ORM-gorm
ORM-gorm 官方文档 http://gorm.book.jasperxu.com/ https://learnku.com/docs/gorm/v2 gorm文档 gorm文档2
- Linux-mysql的备份与恢复
数据库 备份 mysqldump(mysql自带备份功能) - 锁表 - 备份特别慢,适用于数据量较小 - 不可以做增量备份 - 单线程 ``` -A, --all-databases 所有的库 -B ...
- Advanced Installer设置安装最后一步启动软件
左侧用户界面中选择对话框-ExitDialog 在完成操作项中勾选"安装结束时启动应用程序",在弹出的对话框中选择需要启动的exe文件
- Vue核心概念与其指令
Vue简述 Vue是一套构建用户UI界面的前端框架. 构建用户界面的意思是:往html中填充数据,框架的意思是:一套开发规范. Vue的特点 1.数据驱动视图 当页面是一个普通的数据展示时,数据改 ...
- GA算法|遗传算法|SYSU期末课程设计|Python+Matlab实现|超完备代码实现
前言 那么这里博主先安利一下一些干货满满的专栏啦! Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm=1001.2014 ...
- 分享实用小工具:JAVA版本位运算工具类
将二进制数中的每位数字1或0代表着某种开关标记,1为是,0为否,则一个数字可以代表N位的开关标记值,可有效减少过多的变量定义 或 过多的表字段,同时也能在一些复杂的组合判断场景下利用位与.位或.异或等 ...
- shell find 根据时间获取文件列表
根据时间得到文件,可以使用find进行查找,支持查找: find以时间为条件查找可用选项: -amin n:查找n分钟以前被访问过的所有文件. -atime n:查找n天以前被访问过的所有文件. -c ...
- ABC 304
T4 在一个平面上有一块面积无限的蛋糕,给出 \(n\) 颗草莓的所在位置和 \(a\,(b)\) 条平行与 \(x\,(y)\) 轴的切刀位置. 切刀会把蛋糕沿 \(x\,(y)\) 轴切开.因此一 ...
- NEMU PA 4 实验报告
一.实验目的 在前面的PA123中,我们分别实现了基本的运算单元,实现了各种指令和程序的装载,实现了存储器的层次结构.而在PA4中,为了让NEMU可以处理异常情况以及和外设交互,我们要做的事情有以下: ...
- NC22594 Rinne Loves Graph
题目链接 题目 题目描述 Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些 ...