java arraylist 匿名类_JavaSE Day07 面向对象、匿名类

1. 说一说你对多态的理解?

父类(接口)类型指向子类对象

调用子类重写的方法

9281b0de2546

image.png

2. 接口实现 和 类继承 都是里氏代换原则的具体实现吗?

是的

使用基类或者接口的方法时,可以传入子类,从而使用子类的重写的方法,最终达到不同的效果

3. 思考下图,为什么 Animal dog2 = new Dog() 调用的是 Animal - run?

9281b0de2546

image.png

一句话解释得很到位:Java 中的多态指的是实例方法。

静态方法没有多态,只会根据类型判断,从而决定调用

9281b0de2546

image.png

4. instanceof 判断类型 对父类和接口都可以吗?

都可以

9281b0de2546

image.png

5. 如何定义一个匿名类?什么时候使用匿名类?

当接口、抽象类的实现类,在整个项目中只用过一次,可以考虑使用匿名类

9281b0de2546

image.png

6. 匿名类最重要的用途(本质其实就一点,重要)?

代码传递

9281b0de2546

image.png

7. 实战:用匿名类实现代码传递,做一个测试代码块指向时间的工具类?

package com.lsp.utils;

public class TimeUtil {

public interface Block {

void execute();

}

public static void executeBlock(Block block) {

long startTime = System.currentTimeMillis();

block.execute();

long endTime = System.currentTimeMillis();

System.out.println(endTime - startTime);

}

}

调用代码

package com.lsp.demo;

import com.lsp.utils.*;

public class TimeDemo {

public static void main(String[] args) {

TimeUtil.executeBlock(new TimeUtil.Block() {

@Override

public void execute() {

String str = "";

for (int i = 0; i < 30000; i++) {

str += i;

}

}

});

}

}

8. 实战:使用匿名类,实现一个仿 HTTP 的 get 请求函数,能异步回调成功或失败?

package com.lsp.utils;

public class NetworkUtil {

public interface Block {

void success(Object obj);

void failure(Object obj);

}

public static void getUser(String url, Block block) {

// 1. 开启异步线程获取数据库资源

String data = "用户数据获取成功:张三、男、24 岁";

// 2. 如果成功就调用 success 返回 ,如果失败就调用 failure

if (data.length() > 0) {

block.success(data);

} else {

block.failure("获取失败");

}

}

}

调用代码

package com.lsp.demo;

import com.lsp.utils.NetworkUtil;

public class NetworkDemo {

public static void main(String[] args) {

NetworkUtil.getUser("http://xxxx", new NetworkUtil.Block() {

@Override

public void success(Object obj) {

// 获取成功会来到这里

System.out.println(obj);

}

@Override

public void failure(Object obj) {

// 获取失败会来到这里

System.out.println(obj);

}

});

}

}

9. 实战:写一个能够让调用 定制过滤策略 的文件读取功能?

package com.lsp.utils;

import java.util.ArrayList;

public class FilenameReadUtil {

public interface Block {

boolean accept(String filename);

}

public static ArrayList readFiles(Block filter) {

// 1.模拟读取文件

String[] filenameArray = {"Java编程","C++编程","OC编程","Swift编程"};

// 2.调用过滤器,获取用户定制过滤条件,过滤之后的数据

ArrayList resultArray = new ArrayList();

for (int i = 0; i < filenameArray.length; i++) {

String filenameString = filenameArray[i];

if (filter.accept(filenameString)) {

resultArray.add(filenameString);

}

}

// 3.返回过滤后的数据

return resultArray;

}

}

调用代码

package com.lsp.demo;

import java.util.ArrayList;

import com.lsp.utils.FilenameReadUtil;

public class FilenameFilterDemo {

public static void main(String[] args) {

ArrayList resultList = FilenameReadUtil.readFiles(new FilenameReadUtil.Block() {

@Override

public boolean accept(String filename) {

if (filename.contains("C")) {

return true;

} else {

return false;

}

}

});

System.out.println(resultList.toString());

}

}

10. 什么是 Lambda 表达式?如何把上面的实战 7 用 Lambda 表达式进行改造?

9281b0de2546

image.png

package com.lsp.demo;

import com.lsp.utils.TimeUtil;

public class LambdaDemo {

public static void main(String[] args) {

TimeUtil.executeBlock(() -> {

String str = "";

for (int i = 0; i < 30000; i++) {

str += i;

}

});

}

}

11. Lambda 表达式没有引入新的作用于是什么意思?

9281b0de2546

image.png

12. 使用方法引用技术来简化 lambda 表达式?(以后用多了再看吧,现在看了也记不住)

9281b0de2546

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值