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 类的内部成员之五:内部类的更多相关文章

  1. 假如java类里的成员变量是自身的对象

    假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了. 不过我想的肯定是错的,因为很多类的成员变量是自身对象,并且绝对无错,举个例子: Class A{ pr ...

  2. 【基础】java类的各种成员初始化顺序

    父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序 前言: 普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出 ...

  3. java类里的成员变量是自身的对象问题

    今晚看单例模式饿汉时想到一个问题:假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了.于是上网搜索了下,哈哈,果然有人早就思考过这个问题了,站在巨人的肩膀上 ...

  4. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...

  5. java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

    如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...

  6. 【Java.Regex】使用正则表达式查找一个Java类中的成员函数

    代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; imp ...

  7. 7.1 java 类、(成员)变量、(成员)方法

    /* * 面向对象思想: * 面向对象是基于面向过程的编程思想. * * 面向过程:强调的是每一个功能的步骤 * 面向对象:强调的是对象,然后由对象去调用功能 * * 面向对象的思想特点: * A:是 ...

  8. 一道关于java 类初始化 成员初始化的笔试题的解析

    代码如下: java笔试题public class Mapplication { private static int n; private static Mapplication m1 = new ...

  9. java 类中的细节

    java 中类: 类是用于描述统一类型的对象的一个抽象的概念,类中定义了这一类对象所因具有的静态和动态属性. 举例: 瓶子静态: 有一个口.长长的形状-->java类中的成员变量动态属性: 可以 ...

  10. 学习笔记 Java类的封装、继承和多态 2014.7.10

    1.问题:toString()没搞懂? int a = 1; Integer aa = new Integer(a); //这是实现的过程 System.out.println("Hello ...

随机推荐

  1. 微信小程序-组件生命周期方法

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/api/Component.html 正如官方显示组件的生命周期中常用的 ...

  2. go中bufio使用小结

    bufio 前言 例子 bufio 源码解析 Reader对象 实例化 ReadSlice ReadString ReadLine Peek Scanner Give me more data Err ...

  3. 深度学习应用篇-计算机视觉-目标检测[4]:综述、边界框bounding box、锚框(Anchor box)、交并比、非极大值抑制NMS、SoftNMS

    深度学习应用篇-计算机视觉-目标检测[4]:综述.边界框bounding box.锚框(Anchor box).交并比.非极大值抑制NMS.SoftNMS 1.目标检测综述 对计算机而言,能够&quo ...

  4. 小知识:MySQL配置文件优先级

    今天在RHEL7上,严格按之前的安装规范文档,部署MySQL环境时,发现通过服务的方式启动MySQL失败: 关键错误是: log-error set to '/var/log/mariadb/mari ...

  5. Kafka-生产者性能调优

    (一)参数调优 参数调优相关代码 在实际的kafka开发中,我们会发现,无论是生产者还是消费者,都需要构建一个Properties对象,里面设置了很多参数.在这段代码中有很多常用的参数配置,在线上使用 ...

  6. npm修改源地址,使用nrm管理源仓库地址

    壹 ❀ 引 事实上现在大部分的公司,都会有自己的npm三方包管理仓库,利于三方包版本管理以及项目三方依赖稳定性.但如果我们npm配置了公司的源仓库地址,以后所有的三方包来源都将以这个仓库为准,假设你现 ...

  7. Codeforces Round #847 (Div. 3) A-G

    比赛链接 A 题意 判断输入字符串与 \(\pi\) 的最长前缀匹配,不超过 \(30\) 位. 题解 知识点:模拟. 抄样例最后一个 \(30\) 都正确的,直接匹配. 时间复杂度 \(O(1)\) ...

  8. NC16122 郊区春游

    题目链接 题目 题目描述 今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci.经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考虑 ...

  9. SATA 学习笔记——Link Layer 8b/10b 编码解析

    一.故事前传 我们上回说到Link layer的结构,link layer的作用大致可以包括以下几点: Frame flow control CRC的生成与检测 对数据与控制字符的Scrmable/D ...

  10. MongoDB Security

    1.  Security MongoDB提供了一系列的保护措施,以保护它自身安全: 启用访问控制并实行身份验证 MongoDB支持多种身份认证机制,默认的认证机制是SCRAM 配置基于角色的访问控制 ...