java内部类选择题,Java练习题 - 内部类

第一题:需求实现

定义HandleAble接口,具备一个处理字符串数字的抽象方法方法HandleString(String num)。

处理方式1:取整数部分。

处理方式2:保留指定位小数,四舍五入。

代码实现,效果如图所示:

baa60ea9d925?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

开发提示:

匿名内部类的方式,调用所有抽象方法。

参考答案:

public class Test1 {

public static void main(String[] args) {

String str = "23.23456789";

System.out.println("原数字字符串:" + str);

HandleAble s1 = new HandleAble() {

@Override

public String handleString(String str) {

return str.substring(0, str.indexOf("."));

}

};

String string = s1.handleString(str);

System.out.println("取整后:" + string);

int num = 4;

HandleAble s2 = new HandleAble() {

@Override

public String handleString(String str) {

int i = str.indexOf(".") + num + 1;

char c = str.charAt(i);

//System.out.println(c);

if (c <= '4') {

return str.substring(0, i).toString();

} else {

char c1 = (char) (str.charAt(str.indexOf(".") + num) + 1);

return str.substring(0, i - 1) + c1;

}

}

};

String sss = s2.handleString(str);

System.out.println("保留" + num + "位小数后:" + sss);

}

}

interface HandleAble {

public abstract String handleString(String str);

}

第二题:需求实现

模拟上课出勤情况。

定义学生类:

属性:姓名,出勤。

提供基本的构造方法和get方法,set方法。

定义讲师类:

属性:姓名。

提供基本的构造方法和get方法,set方法

成员方法:点名方法,设置每一位的学生出勤情况。假设,小明今日未出勤。

定义课程类:

属性:课程名称,讲师,学生集合。

提供基本的构造方法和get方法,set方法

成员方法:show方法,打印课程信息,老师姓名,学生是否上课情况。

代码实现,效果如图所示:

baa60ea9d925?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

参考答案:

public class Test2 {

public static void main(String[] args) {

// 创建Student 对象

Student s = new Student("小红");

Student s2 = new Student("小亮");

Student s3 = new Student("小明");

// 创建 ArrayList

ArrayList sList = new ArrayList<>();

sList.add(s);

sList.add(s2);

sList.add(s3);

Teacher t = new Teacher("张老师");

Course course = new Course("Java", t, sList);

t.dianMing(sList);

course.show();

}

}

class Course {

private String name;

private Teacher t;

private ArrayList sList;

public Course() {

}

public Course(String name, Teacher t, ArrayList sList) {

this.name = name;

this.t = t;

this.sList = sList;

}

public void show() {

System.out.println("课程名称:" + name);

System.out.println("授课老师:" + t.getName());

for (int i = 0; i < sList.size(); i++) {

Student student = sList.get(i);

String name = student.getName();

if (student.isCome()) {

System.out.println("上课: " + name);

} else {

System.out.println("旷课: " + name);

}

}

}

}

class Teacher {

private String name;

public Teacher(String name) {

this.name = name;

}

public void dianMing(ArrayList slist) {

for (int i = 0; i < slist.size(); i++) {

Student student = slist.get(i);

if (!student.getName().equals("小明")) {

student.setCome(true);

}

}

}

public String getName() {

return name;

}

}

class Student {

private String name;

private boolean come;

public Student(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public boolean isCome() {

return come;

}

public void setCome(boolean come) {

this.come = come;

}

}

第三题:需求实现

模拟接待员接待用户,根据用户id,给用户分组。

定义接口Filter:

提供抽象方法filterUser(User u)

定义用户类:

属性:用户类型,用户id

提供基本的构造方法和get方法,set方法

定义接待员类:

属性:接口Filter

提供基本的构造方法和get方法,set方法

成员方法:接待用户方法,设置用户类型。

测试类:

初始化50个User对象,id为1-50。

创建三个接待员对象。

第一个接待员,设置接待规则,将10-19号用户类型设置为v1。

第二个接待员,设置接待规则,将20-29号用户类型设置为v2。

遍历用户集合,给用户分区。

代码实现,效果如图所示:

baa60ea9d925?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

参考答案:

public class Test3 {

public static void main(String[] args) {

ArrayList ulist = new ArrayList<>();

for (int i = 1; i <= 50; i++) {

ulist.add(new User(i));

}

System.out.println("未分组:");

System.out.println(ulist);

Reception r1 = new Reception();

Reception r2 = new Reception();

Reception r3 = new Reception();

r1.setF(new Filter() {

@Override

public void filterUser(User u) {

if (u.getId() >= 10 && u.getId() < 20)

u.setType("v1");

}

});

r2.setF(new Filter() {

@Override

public void filterUser(User u) {

if (u.getId() >= 20 && u.getId() < 30)

u.setType("v2");

}

});

for (int i = 0; i < ulist.size(); i++) {

User user = ulist.get(i);

r1.recept(user);

r2.recept(user);

r3.recept(user);

}

System.out.println("已分组:");

for (int i = 0; i < ulist.size(); i++) {

User user = ulist.get(i);

if (i % 9 == 0) {

System.out.println();

}

System.out.print(user + " ");

}

}

}

class Reception {

Filter f;

public Filter getF() {

return f;

}

public void setF(Filter f) {

this.f = f;

}

public void recept(User u) {

if (u.getType() != null)

return;

if (f != null) {

f.filterUser(u);

return;

} else {

u.setType("A");

}

}

}

class User {

private String type;

private int id;

public User(int id) {

this.id = id;

}

public int getId() {

return id;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

@Override

public String toString() {

return id + "-" + type;

}

}

interface Filter {

public abstract void filterUser(User u);

}

第四题:需求实现

模拟工人挑苹果。

定义苹果类:

属性:大小,颜色。

提供基本的构造方法和get方法,set方法

定义接口CompareAble:

定义默认方法compare,挑选较大苹果。

定义接口实现类Compare。

定义工人类:

成员方法:挑选苹果Apple pickApple(CompareAble,Apple a1,Apple a2)。

测试类:

创建Worker对象。

创建两个Apple对象,一个Apple(5,"青色"),一个Apple(3,"红色")

默认挑选大的苹果,打印苹果信息。

指定颜色挑选,通过匿名内部类实现。

代码实现,效果如图所示:

baa60ea9d925?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

参考答案:

public class Test4 {

public static void main(String[] args) {

Worker worker = new Worker();

Apple apple1 = new Apple(5, "青色");

Apple apple2 = new Apple(3, "红色");

System.out.println("默认挑大的:");

Apple apple = worker.pickApple(new Com(), apple1, apple2);

System.out.println(apple);

System.out.println("挑红的:");

Apple apple3 = worker.pickApple(new Com() {

@Override

public Apple compare(Apple a1, Apple a2) {

return "红色".equals(a1.getColor()) ? a1 : a2;

}

}, apple1, apple2);

System.out.println(apple3);

}

}

class Worker {

public Apple pickApple(CompareAble c, Apple a1, Apple a2) {

Apple compare = c.compare(a1, a2);

return compare;

}

}

class Apple {

double size;

String color;

public Apple(double size, String color) {

this.size = size;

this.color = color;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public double getSize() {

return size;

}

public void setSize(double size) {

this.size = size;

}

@Override

public String toString() {

return size + "-" + color;

}

}

interface CompareAble {

public default Apple compare(Apple a1, Apple a2) {

return a1.getSize() > a2.getSize() ? a1 : a2;

}

}

class Com implements CompareAble {

}

第五题:需求实现

模拟玩家选择角色。

定义接口FightAble:

抽象方法:specialFight。

默认方法:commonFight,方法中打印"普通打击"。

定义战士类:

实现FightAble接口,重写方法中打印"武器攻击"。

定义法师类:

实现FightAble接口,重写方法中打印"法术攻击"。

定义玩家类Player:

成员方法:FightAble select(String str),根据指令选择角色。

法力角色,选择法师。

武力角色,选择战士。

代码实现,效果如图所示:

baa60ea9d925?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

参考答案:

public class Test5 {

public static void main(String[] args) {

Player player = new Player();

String select = "法力角色";

System.out.println("选择:"+ select);

FightAble f = player.select(select);

f.specialFight();

f.commonFight();

System.out.println("=================");

select = "武力角色";

System.out.println("选择:"+ select);

FightAble f2 = player.select(select);

f2.specialFight();

f2.commonFight();

}

}

class Player {

public FightAble select(String str) {

if ("法力角色".equals(str)) {

return new FaShi();

} else if ("武力角色".equals(str)) {

return new ZhanShi();

}

return null;

}

}

class FaShi implements FightAble {

@Override

public void specialFight() {

System.out.println("法术攻击");

}

}

class ZhanShi implements FightAble {

@Override

public void specialFight() {

System.out.println("武器攻击");

}

}

interface FightAble {

public abstract void specialFight();

public default void commonFight() {

System.out.println("普通打击");

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值