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 ...
随机推荐
- NLP国内外大模型汇总列表[文心一言、智谱、百川、星火、通义千问、盘古等等]
NLP国内外大模型汇总列表[文心一言.智谱.百川.星火.通义千问.盘古等等] 中国大模型列表大全,全面收集有明确来源的大模型情况,包括机构.来源信息和分类等,随时更新. Awesome family ...
- 深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)
深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别.实体.关系.属性抽取实战项目合集(含智能标注) 1.命名实体识别介绍 命名实体识别(Named Entity R ...
- 8.1 C++ STL 变易拷贝算法
C++ STL中的变易算法(Modifying Algorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入.删除.替换等操作.这些算法同样定义在头文件 <algor ...
- GDB调试程序 [补档-2023-07-19]
gdb调试 它是gcc的调试工具,调试工具都能干什么就不多说了. 7-1生成调试信息 在使用gcc编译c/c++的程序时,需要在编译命令中加入 -g 这一参数,它可以为你显示函数名,变量名 等 ...
- 【Trento】遥感图像数据集提供下载
遥感图像处理学习(11)之Trento数据集 前言 遥感系列第11篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2024年1月18日 2024年1月25日搬运至本人博客园平台 最近在复现论 ...
- How to 充分利用你的服务器
服务器高性能计算指南 本文处于preview阶段,内容并不完全严谨,如有错误敬请原谅,适当参考. 目录 服务器高性能计算指南 什么样的计算适合当前服务器? 从CPU架构入手 两个CPU带来的影响 那么 ...
- 【技能篇】解决vs编译器scanf等函数不安全问题【手把手操作-一分钟解决】
[技能篇]解决Vs编译器scanf等函数不安全问题 文章目录 说在前面 博主给大家的福利 解决方案 解决过程 尾声 说在前面 大家刚开始学习编程的时候,使用vs编译器.使用scanf等函数的时候遇到的 ...
- shell 两个数组比较,得到元素的并集、交集等
linux shell 实现数组比较,取元素的并集.交集时,可以使用sort排序.uniq统计和awk数据过滤. shell 实现如下 file_list_1=("test1" & ...
- .NET中使用BootstrapBlazor组件库Table实操篇
前言 Table表格在后台管理应用中使用的是相当频繁的,因此找一个功能齐全的前端框架对于我们而言是非常必要的,因为封装完善的前端框架能够大大提升我们的工作对接效率.今天我们主要来讲解一下在.NET中使 ...
- Codeforces Round #821 (Div. 2) A-E
比赛链接 A 题解 知识点:贪心. 下标模 \(k\) 相同分为一组,共有 \(k\) 组,组间不能互换,组内任意互换. 题目要求连续 \(k\) 个数字,一定能包括所有的 \(k\) 组,现在只要在 ...