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版 李刚】- 内部类的更多相关文章

  1. 【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 ...

  2. 【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 ...

  3. 【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 ...

  4. 【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 ...

  5. 【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 ...

  6. 【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 ...

  7. 【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 ...

  8. 【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 ...

  9. 【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 ...

  10. 【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 ...

随机推荐

  1. 7.8CSS部分的学习!

    <!DOCTYPE html> <html> <head> <title>CSS元素选择器</title> <style type=& ...

  2. E - Radar Installation

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  3. day3 三、基本数据类型和运算符

    一.多行注释和单行注释 """ 多行注释 多行注释 多行注释 """ # 单行注释 # print('hello world') # pri ...

  4. WebLogic初学笔记

    这两天在公司自己摸索着用WebLogic(因为可以问的同事不多),之前一直用的是tomcat.面对一个从不了解的技术,自己摸索似乎非常背劲.后来有同事指点果然事半功倍. 项目使用WebLogic版本: ...

  5. .NET Core开发日志——HttpContext

    之前的文章记述了从ASP.NET Core Module到KestrelServer的请求处理过程.现在该聊聊如何生成ASP.NET中我们所熟悉的HttpContext. 当KestrelServer ...

  6. 【绿书】 模拟,rep大坑

    https://vjudge.net/contest/229603#problem/B 绿书题 大模拟,绿书上用了个比较麻烦的输入,其实只要getchar()!='0'就行 坑: rep(i,0,s. ...

  7. 一道hive SQL面试题

    一.hive中实现方法 基表: 组表: gt   gid gname 1001 g1 1002 g2 1003 g3 create table g( gid int, gname string )ro ...

  8. 在windows下用nvm 安装node

    nvm 可以帮助切换node版本 在此文中,会特意指明一些坑,防止再次踩坑.第一个坑就是,如果你已经单独安装了node,建议先卸载,再来看本文. 1. nvm 下载 nvm 的下载地址:https:/ ...

  9. Flannel配置详解

    1.简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信, Flannel是CoreOS开发,专门用于docker多机 ...

  10. linux进程状态D

    运行在KVM虚拟机里的一些进程突然出了问题,这些出了问题的进程无法用kill杀掉,使用ps可以看到这些进程处于D状态: [build@kbuild-john ~]$ ps -a -ubuild -o ...