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 ...
随机推荐
- vim 从嫌弃到依赖(23)——最后的闲扯
截止到上一篇文章,关于vim的基础操作都已经讨论完了,这篇我主要就是闲扯,瞎聊.就想毕业论文都有一个致谢一样,这篇我们就作为整个系列的致谢吧 学习vim到底能给我们带来什么 学习vim到底能给我们带来 ...
- SqlSugar更新数据
1.根据实体对象更新 所谓按实体对象更新就是:db.Updateable(参数对象) 有参数的重载 db.Updateable(实体或者集合).ExecuteCommand() //右标题1 下面的所 ...
- 【6】python生成数据曲线平滑处理——(Savitzky-Golay 滤波器、convolve滑动平均滤波)方法介绍,推荐玩强化学习的小伙伴收藏
相关文章: Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图 先上效果图: 由于高频某些点的波动导致高频曲线非常难看,为了降低噪声干扰,需要对曲线做平滑处理,让曲线过 ...
- 在Visual Studio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
本文介绍在Visual Studio软件中配置.编译C++环境下GDAL库.SQLite环境与PROJ库的详细方法. GDAL库是一个非常方便的地理数据处理库,但其在C++环境下的配置与编译流 ...
- 【算法】C语言程序编程模拟实现strlen函数和strcpy函数
C语言程序编程模拟实现strlen函数和strcpy函数(超详细的注释和解释) 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说 ...
- 阿里云数仓Dataworks数据导出到文件step by step
背景 假设你在阿里云上Dataworks的空间space下有一个表table_A,想要把它的数据导出到文件以供后续使用,但是数据量又很多,从浏览器复制不太现实.阿里云提供了Java和Python版本的 ...
- ElasticSearch7.3学习(十)----采用restful风格对索引的增删改查
1. 为什么需要手动创建索引 直接put数据 PUT index/_doc/1,es会自动生成索引,并建立动态映射dynamic mapping.这样的话很大可能与实际的需求不服,在实际的应用上,我们 ...
- jetson nano ssh远程连接控制
jetson orin nano ssh远程连接 准备:好用的网线一根,jetson orin nano一台,将网线两端连接nano的网口以及当作主机的笔记本的网口 PS:确保双方网线连接成功,网线设 ...
- 如何使用graalvm为带有反射功能的java代码生成native image
译自Configure Native Image with the Tracing Agent graal官方文档 , 以下所有命令需要在linux环境下操作,graalvm也支持windows. 要 ...
- Python Rich:美化终端显示效果
Rich库的功能就像它的名字一样,使Python编程更加丰富(rich),它帮助开发者在控制台(命令行)输出中创建丰富.多彩和具有格式化的文本. 本篇总结了如何使用Rich库让我们的命令行工具更加美观 ...