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 ...
随机推荐
- 【JS 逆向百例】猿人学系列 web 比赛第五题:js 混淆 - 乱码增强,详细剖析
逆向目标 猿人学 - 反混淆刷题平台 Web 第五题:js 混淆,乱码增强 目标:抓取全部 5 页直播间热度,计算前 5 名直播间热度的加和 主页:https://match.yuanrenxue.c ...
- 爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法
关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! [01x00] 简介 国密即国家密码局认定的国产加密算法,爬虫工程师在做 JS 逆向的时候,会遇 ...
- Protobuf示例:Golang and Python
之前的文章中已经展示过如何在C++中使用protobuf,本文将简单示范protobuf在Golang和Python中的使用. Talk is cheap. Show you my code. 首先是 ...
- 【6】python生成数据曲线平滑处理——(Savitzky-Golay 滤波器、convolve滑动平均滤波)方法介绍,推荐玩强化学习的小伙伴收藏
相关文章: Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图 先上效果图: 由于高频某些点的波动导致高频曲线非常难看,为了降低噪声干扰,需要对曲线做平滑处理,让曲线过 ...
- Linux RDP 会话中无法打开VSCode 解决办法
github issue: VS Code "and still" won't open in a Linux xrdp session Workaround- Linux RDP ...
- Python常见设置
pip的相关设置 设置镜像 为pip设置国内的镜像源可以提高Python库下载的速度,这里推荐使用清华大学的镜像站,使用如下命令配置: python -m pip install --upgrade ...
- [奶奶看了都会]ChatGPT接入企业微信成为聊天机器人
1.聊天效果 上次给大家讲了ChatGPT接入个人微信的方法,但是个人微信容易被封号.这次就教大家接入企业微信,不会再被封号哦~ 话不多说,直接看机器人的聊天效果.基本能实现ChatGPT的聊天效果了 ...
- Linux反空闲的设置和关闭
有一定工作经验的运维人基本都会遇到这样的场景,某个窗口自动断开了,提示超时: [oracle@jystdrac1 ~]$ timed out waiting for input: auto-logou ...
- Libata Error Message 解析
Libata error messages Contents [hide] 1 Overview 2 Prefix 3 Exception line 4 Input taskfile 5 O ...
- Java并发编程之美
简介 <Java并发编程之美>分为三部分,第一部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识.线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用, ...