【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类
1.0.0 Summary
Tittle:【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类
Style:EBook
Series:Java
Since:2017-09-04
End:....
Total Hours:...
Degree Of Diffculty:2
Degree Of Mastery:2
Practical Level:2
Desired Goal:2
Archieve Goal:....
Gerneral Evaluation:...
Writer:kingdelee
Related Links:
http://www.cnblogs.com/kingdelee/
package com.lee.test.java.ebook.crazy_java.u_6_oop_2.c_6_7_inner_test; // 1. 内部类提供了更好的封装
// 2. 在内部类,访问内部类非静态变量用 this.var,访问外部类非静态变量用 Out.this.var
// 3. 在外部类,访问内部类非静态变量用 new Inner().var
// 4. 在外部类,静态的方法不能调用非静态类
// 5. 在非静态内部类,不能存在静态声明
// 6. 外部类访问静态内部类的静态成员,StaticInner.staticVar
// 6.1 外部类访问静态内部类的非静态成员,new StaticInner().var
// 7. 静态内部类无法访问外部类的非静态成员
// 8. 在外部类的外部构造外部类的内部类实例 Out.In in = new Out().new In();
// 8.1 等价于 Out.In in1; Out out = new Out(); in1 = out.new In();
// 9. 子类继承外部类的非静态内部类时,子类构造器必须显式的调用父类的构造器
// 9.1 子类可以直接继承外部类的静态内部类,故优先使用静态内部类会更加方便
// 10. 在外部类的外部构造静态内部类实例 Out.In in = new Out.In();
// 10.1 等价于 Out.staticIn staticIn1; staticIn1 = new Out.staticIn();
// 11. 局部内部类,即定义在方法中的类,Out$NInner.class规则生成class文件:Cow.class Cow$1Inner.class Cow$1InnerSub.class
// 12.1 匿名内部类lambada无参版,接口必须是有唯一抽象方法(类方法、默认方法随意),即函数式接口 @FunctionInterface 下同
// 12.2 匿名内部类lambada有参版,@FunctionInterface
// 12.3 匿名内部类lambada有参版 有返回值 缩略return,@FunctionInterface
// 12.4 匿名内部类lambada有参版,有返回值 显式return,@FunctionInterface
// 12.5 匿名
// 12.6 将实现函数式的接口强转
// 12.7 常见的函数式接口 java.util.function
// xxxFunction, apply() 处理 数值 并返回新值
// xxxConsumer, accept() 处理 新值 不返回值
// xxxPredicate, test() 判断 返回boolean
// xxxSupplier, getAsXxx() 按某种逻辑算法 返回值
// 12.8.1 Lambada 未缩减 调用类方法
// 12.8.1.1 Lambada ::方法调用 省略参数,引用类方法 Converter converter1_1 = Integer::getInteger;
// 12.8.2 Lambada 未缩减 调用实例 Converter converter2 = str -> "".indexOf("");
// 12.8.2.1 Lambada ::方法调用 省略参数,引用实例方法 Converter converter2_1 = str -> "".indexOf("");
// 12.8.3 Lambada 未缩减 调用实例 MyTest converter3 = (a1, b, c) -> a1.substring(b, c);
// 12.8.3.1 Lambada ::方法调用 省略参数,第一个参数为调用者,之后的参数为形参传进来 MyTest converter3_1 = String::substring;
// 12.8.4 Lambada ::new 构造参数 Converter converter4 = Integer::new; public class Cow { private int weight;
private String color = "white"; public Cow(int weight) {
this.weight = weight;
} // 内部类提供了更好的封装
private class CowLeg { private int num;
private String color = "black"; // 5.1 在非静态内部类,不能存在静态声明
// static{
//
// } // 5.2 在非静态内部类,不能存在静态声明
// private static void t1(){
//
// } // 5.3 在非静态内部类,不能存在静态声明
// private static int a; public CowLeg(int num) {
this.num = num;
} public void printLeg() {
System.out.println("this cow weight:" + weight + ", has leg:" + num);
// 2. 在内部类,访问内部类非静态变量用 this.var,访问外部类非静态变量用 Out.this.var
System.out.println("leg color:" + this.color + ", cow color:" + Cow.this.color);
} } // 静态内部类
private static class Life {
private static int num = 5;
private int age; static {
// 7 编译失败,静态内部类无法访问外部类的非静态成员
// System.out.println(Cow.this.color);
} } public void getLife() {
// 6. 外部类访问静态内部类的静态成员,StaticInner.staticVar
System.out.println(Life.num);
// 6.1 外部类访问静态内部类的非静态成员,new StaticInner().var
System.out.println(new Cow(1).color);
} public void getLegInfo(int num) {
new CowLeg(num).printLeg();
// 3. 在外部类,访问内部类非静态变量用 new Inner().var
System.out.println("inner color:" + new CowLeg(1).color);
} public static void main(String[] args) {
new Cow(10).getLegInfo(2); // 4. 编译失败,外部类的静态方法,无法调用非静态的内部类
//new CowLeg(1); // 8. 在外部类的外部构造非静态内部类实例 Out.In in = new Out().new In();
Out.In in = new Out().new In();
// 8.1 等价于 Out.In in1; Out out = new Out(); in1 = out.new In();
Out.In in1;
Out out = new Out();
in1 = out.new In(); // 10 在外部类的外部构造静态内部类实例 Out.In in = new Out.In();
Out.staticIn staticIn = new Out.staticIn();
// 10.1 等价于
Out.staticIn staticIn1;
staticIn1 = new Out.staticIn(); // 11. 局部内部类,即定义在方法中的类,Out$NInner.class规则生成class文件:Cow.class Cow$1Inner.class Cow$1InnerSub.class
class Inner { } class InnerSub extends Inner { } // 12. 匿名内部类
new Cow(1).showFace(new Face() {
@Override
public void show() {
System.out.println("show Cow face");
}
}); // 12.1 匿名内部类lambada无参版,接口必须是有唯一抽象方法(类方法、默认方法随意),即函数式接口 @FunctionInterface 下同
new Cow(1).showFace(() -> System.out.println("show Cow face")); // 12.2 匿名内部类lambada有参版,@FunctionInterface
new Cow(1).drop(num -> System.out.println("drop egg:" + num)); // 12.3 匿名内部类lambada有参版 有返回值 缩略return,@FunctionInterface
Wallet2 w = (int banknote, int coin) -> banknote + coin; // 12.4 匿名内部类lambada有参版,有返回值 显式return,@FunctionInterface
Wallet wallet = (int[] bb, int[] cc) -> {
int count = 0;
for (int b : bb) {
count += b;
}
for (int c : cc) {
count += c;
}
return count;
}; int[] banknotes = {1, 2, 3};
int[] coins = {1, 2, 3};
int count1 = new Cow(1).count(wallet, banknotes, coins); // 12.5 匿名 Runnable r = () -> {};
Runnable r = () -> {
}; // 12.6 将实现函数式的接口强转
Object a = (Runnable) () -> {
}; // 12.7 常见的函数式接口 java.util.function
// xxxFunction, apply() 处理 数值 并返回新值
// xxxConsumer, accept() 处理 新值 不返回值
// xxxPredicate, test() 判断 返回boolean
// xxxSupplier, getAsXxx() 按某种逻辑算法 返回值 // 12.8.1 Lambada 未缩减 调用类方法
Converter converter1 = str -> Integer.getInteger(str);
// 12.8.1.1 Lambada ::方法调用 省略参数,引用类方法
Converter converter1_1 = Integer::getInteger;
// 12.8.2 Lambada 未缩减 调用实例
Converter converter2 = str -> "".indexOf("");
// 12.8.2.1 Lambada ::方法调用 省略参数,引用实例方法
Converter converter2_1 = str -> "".indexOf("");
// 12.8.3 Lambada 未缩减 调用实例
MyTest converter3 = (a1, b, c) -> a1.substring(b, c);
// 12.8.3.1 Lambada ::方法调用 省略参数,第一个参数为调用者,之后的参数为形参传进来
MyTest converter3_1 = String::substring;
// 12.8.4 Lambada ::new 构造参数
Converter converter4 = Integer::new; } public void showFace(Face face) {
face.show();
} public void drop(Egg egg) {
egg.show(2);
} public int count(Wallet wallet, int[] banknotes, int[] coins) {
return wallet.countMoney(banknotes, coins);
} } class Out { class In {
public In() {
System.out.println("in");
}
} static class staticIn {
public staticIn() {
System.out.println("staticIn");
}
} } // 9. 子类继承外部类的非静态内部类时,子类构造器必须显式的调用父类的构造器
class Sub extends Out.In {
public Sub(Out out) {
out.super();
}
} // 9.1 子类可以直接继承外部类的静态内部类,故优先使用静态内部类会更加方便
class Sub2 extends Out.staticIn { } @FunctionalInterface
interface Face {
void show();
} @FunctionalInterface
interface Egg {
void show(int num);
} @FunctionalInterface
interface Wallet {
int countMoney(int[] banknotes, int[] coins);
} @FunctionalInterface
interface Wallet2 {
int countMoney(int banknote, int coin);
} @FunctionalInterface
interface Converter {
Integer convert(String str);
} @FunctionalInterface
interface MyTest {
String test(String a, int b, int c);
}
【Java】-NO.16.EBook.4.Java.1.004-【疯狂Java讲义第3版 李刚】- 内部类的更多相关文章
- 【Java】-NO.16.EBook.4.Java.1.011-【疯狂Java讲义第3版 李刚】- AWT
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- AWT Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- Swing
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.011-[疯狂Java讲义第3版 李刚]- Swing Style:EBook Series:Jav ...
- 【Java】-NO.16.EBook.4.Java.1.012-【疯狂Java讲义第3版 李刚】- JDBC
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.012-[疯狂Java讲义第3版 李刚]- JDBC Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.005-【疯狂Java讲义第3版 李刚】- 枚举
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.005-[疯狂Java讲义第3版 李刚]- 枚举 Style:EBook Series:Java Si ...
- 【Java】-NO.16.EBook.4.Java.1.006-【疯狂Java讲义第3版 李刚】- 垃圾回收
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.006-[疯狂Java讲义第3版 李刚]- 垃圾回收 Style:EBook Series:Java ...
- 【Java】-NO.16.EBook.4.Java.1.007-【疯狂Java讲义第3版 李刚】- Java基础类
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.007-[疯狂Java讲义第3版 李刚]- Java基础类 Style:EBook Series:J ...
- 【Java】-NO.16.EBook.4.Java.1.008-【疯狂Java讲义第3版 李刚】- 集合/容器
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.008-[疯狂Java讲义第3版 李刚]- 集合 Style:EBook Series:Java Si ...
- 【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...
- 【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.010-[疯狂Java讲义第3版 李刚]- 异常 Style:EBook Series:Java Si ...
- 【Java】-NO.16.EBook.4.Java.1.001-【疯狂Java讲义第3版 李刚】- UML
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.001-[疯狂Java讲义第3版 李刚]- Style:EBook Series:Java Since ...
随机推荐
- mysql学习之索引
首先,看一个例子,有一张大表,记录数超过1000,SELECT * FROM student WHERE name='xinan'; 如果没有索引,查找程序就得从头查找,很费时间,表越大越费时间.建立 ...
- spring框架学习感悟
学习了一段时间的spring,但是在练习时老是出现bug,一方面,框架封装了很多东西,简化了开发,但是万一出现问题,就很难排查.这说明应该找个慢慢的熟悉它,并且掌握它. 在这个过程中,可能要不断地试错 ...
- js 使用a标签 下载资源
文档 let data = new Blob(['hello ajanuw'], { type: 'application/text' }) let src = window.URL.createOb ...
- 网络通信协议七之ARP工作过程及工作原理解析
ARP(地址解析协议) 局域网: ARP地址解析协议用于将计算机的网络IP地址转化为物理MAC地址,ARP协议的基本功能就是通过目标设备的IP地址.查询目标设备的MAC地址,以保证通信的顺利进行.在每 ...
- CentOS 7.4下使用yum安装MySQL5.7.20 最简单的 (引用)
引用 https://blog.csdn.net/z13615480737/article/details/78906598 CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ...
- Steeltoe之Config客户端篇
Steeltoe是一款开源项目,其目标是选取源自Netflix及其它公司的工具,使它们能够运用于.NET社区.它不仅可以在.NET Core上,也可以在.NET Framework 4.X以上使用.此 ...
- css学习_标签的显示模式
标签的显示模式 a.块级元素(最典型的是 div标签) 特点: 默认宽度 100% 可以容纳块级元素和内联元素 b.行内元素 (最典型的是 span标签) 特点: c.行内块元素(最典型的是 i ...
- {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)
Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...
- 洛谷试炼场-简单数学问题-P1088 火星人
洛谷试炼场-简单数学问题 A--P1088 火星人 Description 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...
- [No0000E0]批量打开当前路径下的文件
for /r %i in ( *) do start %i