1.玩家选择角色
package com.atguigu.homework.test03;
import java.util.Scanner;
/*
* 1.定义接口FightAble:
抽象方法:specialFight。
默认方法:commonFight,方法中打印"普通打击"。
* 2.定义战士类:
实现FightAble接口,重写方法中打印"武器攻击"。
* 3.定义法师类Mage:
实现FightAble接口,重写方法中打印"法术攻击"。
* 4.定义玩家类Player:
静态方法:FightAble select(String str),根据指令选择角色。
法力角色,选择法师。
武力角色,选择战士。
*/
public class Test03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("选择:");
String role = input.next();
FightAble f = Player.select(role); //Player.select(role)返回new Mage(),Mage类里重写了specialFight()方法
f.specialFight();
f.commonFight();
}
}
//1111111111111111111111111111111111111111111111111111111111111111111111
interface FightAble{
void specialFight();
public default void commonFight(){
System.out.println("普通打击");
}
}
class Soldier implements FightAble{
@Override
public void specialFight() {
System.out.println("武器攻击");
}
}
class Mage implements FightAble{
@Override
public void specialFight() {
System.out.println("法术攻击");
}
}
class Player{
public static FightAble select(String str){
if("法力角色".equals(str)){
return new Mage(); //com.itheima.demo01.Mage@610455d6
}else if("武力角色".equals(str)){
return new Soldier();
}
return null; //函数不是void要有返回值
}
}
2.人工挑苹果
package com.atguigu.homework.test04;
public class Apple {
private double size;
private String color;
public Apple(double size, String color) {
super();
this.size = size;
this.color = color;
}
public Apple() {
super();
}
public double getSize() {
return size;
}
public void setSize(double size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return size + "-" + color;
}
}
package com.atguigu.homework.test04;
public interface CompareAble {
//定义默认方法compare,挑选较大苹果。
public default void compare(Apple a1, Apple a2){
if(a1.getSize() > a2.getSize()){
System.out.println(a1);
}else{
System.out.println(a2);
}
}
}
package com.atguigu.homework.test04;
public class CompareBig implements CompareAble{
//CompareAble接口有默认方法就是挑较大苹果
}
package com.atguigu.homework.test04;
public class CompareColor implements CompareAble{
//挑红色
public void compare(Apple a1, Apple a2){
if("红色".equals(a1.getColor())){
System.out.println(a1);
}
if("红色".equals(a2.getColor())){
System.out.println(a2);
}
}
}
package com.atguigu.homework.test04;
//工人类挑选苹果public void pickApple(CompareAble c,Apple a1,Apple a2)。
public class Worker {
public void pickApple(CompareAble c,Apple a1,Apple a2){
c.compare(a1, a2);
}
}
package com.atguigu.homework.test04;
public class Test04 {
public static void main(String[] args) {
Worker w = new Worker();
Apple a1 = new Apple(5.0, "青色");
Apple a2 = new Apple(3.0, "红色");
CompareBig cb = new CompareBig();
w.pickApple(cb, a1, a2); //工人挑大苹果
CompareColor cc = new CompareColor();
w.pickApple(cc, a1, a2); //工人挑红苹果
}
}
将上面改为匿名内部类实现接口
来代替CompareBig和CompareColor就不用单独写两个实现类了。自己定义的,不是able to。比较大小同理。
3.员工类接口
package com.atguigu.test06.exer;
/*
(1)声明一个员工类Employee,有属性:编号、姓名、年龄、薪资
(2)让Employee员工类实现java.lang.Comparable接口,重写抽象方法,按照编号从小到大排序
*/
public class Employee implements Comparable{
private int id;
private String name;
private int age;
private double salary;
public Employee(int id, String name, int age, double salary) {
super();
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public Employee() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
//重写抽象方法,按照编号从小到大排序
@Override
public int compareTo(Object o) {
return this.id - ((Employee)o).id;
}
}
package com.atguigu.test06.exer;
import java.util.Comparator;
/*
* (4)声明SalaryComparator类,实现java.util.Comparator接口,
重写抽象方法,按照薪资从高到低排序
*/
public class SalaryComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Employee e1 = (Employee) o1;
Employee e2 = (Employee) o2;
if(e1.getSalary() > e2.getSalary()){
return -1;
}else if(e1.getSalary() < e2.getSalary()){
return 1;
}
return 0;
}
}
package com.atguigu.test06.exer;
import java.util.Arrays;
/*
(3)在测试类中创建Employee[]数组,调用java.util.Arrays的sort方法进行排序,遍历结果。
用SalaryComparator对象重新对Employee[]数组进行排序,遍历结果。
*/
public class TestExer2 {
public static void main(String[] args) {
Employee[] all = new Employee[3];
all[0] = new Employee(2, "王小二", 22, 20000);
all[1] = new Employee(3, "张三", 23, 13000);
all[2] = new Employee(1, "李四", 24, 8000);
//调用java.util.Arrays的sort方法进行排序,遍历结果
Arrays.sort(all);
for (int i = 0; i < all.length; i++) {
//按编号id从小到大排序
System.out.println(all[i]);
}
System.out.println("-----------------------------");
//再次调用java.util.Arrays的sort方法进行排序,遍历结果
Arrays.sort(all, new SalaryComparator());
for (int i = 0; i < all.length; i++) {
System.out.println(all[i]);
}
}
}
4. 医生帮换心脏
package com.atguigu.test06;
public abstract class Organ {
//器官类型
public abstract void doWork();
}
package com.atguigu.test06;
import java.util.Random;
public class Body {
private String owner;
private double weight;//克
private boolean health;
private Organ heart;
public Body(String owner, double weight, boolean health) {
super();
this.owner = owner;
this.weight = weight;
this.health = health;
//如下heart在有参构造中根据身体body状况创建心脏对象,new Heart()不传参,无参构造。
Heart heart = new Heart();
heart.size = weight * 0.005;
Random rand = new Random();
if(health){
heart.color = "鲜红色";
//rand.nextInt(41)==>[0,41),[0,40] //60-100
heart.beatPerMinute = rand.nextInt(41) + 60;
}else{
heart.color = "暗红色";
//[0,60) 或 [101,~)
heart.beatPerMinute = rand.nextInt(60);
}
this.heart = heart; //此时才创建
}
//1111111111111111111111111111111111111111111111111111111111111111111111111111
private class Heart extends Organ{
int beatPerMinute;//每分钟跳动次数
String color;
double size;
@Override
public void doWork() {
System.out.println("心率:" + beatPerMinute + ",大小:" + size + ",颜色:" + color);
//如下owner属性是创建Heart对象的那个Body对象,Body.this指Body这类的成员变量,不是外部传入
// System.out.println("为血液流动提供动力,把血液运行至" + owner + "身体各个部分");
System.out.println("为血液流动提供动力,把血液运行至" + Body.this.owner + "身体各个部分");
}
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public boolean isHealth() {
return health;
}
public void setHealth(boolean health) {
this.health = health;
}
public Organ getHeart() {
return heart;
}
public void setHeart(Organ heart) {
this.heart = heart;
}
@Override
public String toString() {
return "姓名:" + owner + ", 体重:" + weight + ",健康与否:" + health;
}
}
package com.atguigu.test06;
public class Doctor {
public void swapHeart(Body b1, Body b2){
Organ temp = b1.getHeart();
b1.setHeart(b2.getHeart()); //b1心脏为b2
b2.setHeart(temp); //b2心脏为b1
boolean hTemp = b1.isHealth();
b1.setHealth(b2.isHealth()); //b1健康为b2
b2.setHealth(hTemp); //b2心脏为b1
}
}
package com.atguigu.test06;
public class TestExer06 {
public static void main(String[] args) {
Body b1 = new Body("张三", 50000, true);
Body b2 = new Body("李四",100000,false);
System.out.println(b1); //姓名 ,体重 ,健康
b1.getHeart().doWork(); //心率 ,为血液
System.out.println(b2); //姓名 ,体重 ,健康
b2.getHeart().doWork(); //心率 ,为血液
System.out.println("============================");
Doctor d = new Doctor();
d.swapHeart(b1, b2);
System.out.println(b1); //姓名 ,体重 ,健康
b1.getHeart().doWork(); //心率 ,为血液
System.out.println(b2); //姓名 ,体重 ,健康
b2.getHeart().doWork(); //心率 ,为血液
}
}
B站/知乎/微信公众号:码农编程录