千锋20200228
千锋“逆战”学习第20天
每日一句:调试完一个动态连接函数,固然值得兴奋,但真正的成功远还在无数个函数之后。
今天学习了类的相关知识,内部类和Object类。
下周继续加油。
作业
Question_09
2.有如下代码:
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " " + age;
}
}
public class TestStudent {
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student("Tom", 18);
System.out.println(stu1);
System.out.println(stu2);
}
}
运行结果:
null 0
Tom 18
---------------------------------------------------------------------------------
3.有如下代码:
public class TestEquals {
public static void main(String[] args) {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
System.out.println(str1==str2);
}
}
运行结果:
true
false
---------------------------------------------------------------------------------
4.有如下代码:
class Animal {
}
class Dog extends Animal {
}
public class TestGetClass {
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Animal();
System.out.println(a1 instanceof Animal);
System.out.println(a1.getClass() == a2.getClass());
}
}
运行结果:
true
false
---------------------------------------------------------------------------------
5.java中的内部类包括:
A.成员内部类
B.静态内部类
C.局部内部类
D.匿名内部类
E.公开内部类
F.抽象内部类
答案:A B C D
---------------------------------------------------------------------------------
6.为Worker类增加equals和toString方法
class Worker {
String name;
int age;
double salary;
public Worker(String name, int age, double salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (this.getClass() != obj.getClass()) {
return false;
}
Worker worker = (Worker) obj;
if (this.name.equals(worker.name) && this.age == worker.age && this.salary == worker.salary) {
return true;
}
return false;
}
public String toString() {
return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
}
public class TestWorker {
public static void main(String[] args) {
Worker w1 = new Worker("tom", 30, 6000.0);
Worker w2 = new Worker("jack", 31, 5000.0);
Worker w3 = new Worker("tom", 30, 6000.0);
System.out.println(w1);
System.out.println(w2);
System.out.println(w3);
System.out.println(w1.equals(w2));
System.out.println(w1.equals(w3));
}
}
运行结果:
Worker [name=tom, age=30, salary=6000.0]
Worker [name=jack, age=31, salary=5000.0]
Worker [name=tom, age=30, salary=6000.0]
false
true
---------------------------------------------------------------------------------
9.有如下代码:
public class OuterClass {
private int value1 = 100;
private static int value2 = 200;
public void method(int value3) {
final int value4 = 400;
class InnerClass{
public void print(){
/*1*/
}
}
}
}
下列哪些代码放在/*1*/处编译通过
A.System.out.println(value1);
B.System.out.println(value2);
C.System.out.println(value3);
D.System.out.println(value4);
答:A B D
---------------------------------------------------------------------------------
10.代码填空
interface Light{
void shine();
}
class Lamp{
public void on(Light light) {
light.shine();
}
}
public class TestLamp {
public static void main(String[] args) {
Lamp lamp = new Lamp();
//1.局部内部类
//2.匿名内部类
}
}
(1)在//1处使用局部内部类,调用lamp的on方法要求输出“shine in red”
class RedLight implements Light{
public void shine() {
System.out.println("shine in red");
}
}
lamp.on(new RedLight());
(2)在//2处使用匿名内部类,调用lamp的on方法要求输出“shine in yellow”
lamp.on(new Light() {
public void shine() {
System.out.println("shine in yellow");
}
});
---------------------------------------------------------------------------------
Question_Difficult
8.根据类图,创建三个类,组成一个继承树,表示游戏中的角色
abstract class Role {// 所有职业的父类
private String name;// 角色名字
public abstract int attack();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Magicer extends Role {
private int level;// 魔法等级(范围:1-10)
public int attack() {// 返回法师对敌人攻击的伤害值
return level * 5;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
if (level > 0 && level < 11) {
this.level = level;
} else {
System.out.println("魔法等级已到上限");
}
}
}
class Solider extends Role {
private int hurt;
public int attack() {
return hurt;
}
public int getHurt() {
return hurt;
}
public void setHurt(int hurt) {
this.hurt = hurt;
}
}
class Team {
static int i = 0;// 组队成员数
static Role[] roles = new Role[6];
public void addMember(Role role) {
roles[i++] = role;
}
public int attackSum() {
int sum = 0;
for (int j = 0; j < i; j++) {
sum += roles[j].attack();
}
return sum;
}
}
public class TestGame {
public static void main(String[] args) {
Magicer m = new Magicer();
m.setName("老爹");
m.setLevel(8);
System.out.println("魔法师:" + m.getName() + " 伤害值:" + m.attack());
Solider s = new Solider();
s.setName("成龙");
s.setHurt(100);
System.out.println("战士:" + s.getName() + " 伤害值:" + s.attack());
Team t = new Team();
t.addMember(m);
t.addMember(s);
System.out.println("小队总伤害:" + t.attackSum());
}
}
运行结果:
魔法师:老爹 伤害值:40
战士:成龙 伤害值:100
小队总伤害:140
---------------------------------------------------------------------------------
10.在第八题基础上进行修改
//1.创建Role接口
interface Role {
public int attack();
public void practise();
}
//2.创建NamedRole类
abstract class NamedRole implements Role {
private String name;
private int age;
public NamedRole() {
}
public NamedRole(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
//3.创建MagicStick接口
interface MagicStick{
public int fire();
}
//4.为MagicStick增加两个实现类
class GreenStick implements MagicStick{
public int fire() {
Date month = new Date();
if(month.getMonth()>=6&&month.getMonth()<=8) {
return 2;
}
else {
return 1;
}
}
}
class BlackStrick implements MagicStick{
public int fire() {
Date month = new Date();
if(month.getMonth()%2==0) {
return 2;
}
else {
return 1;
}
}
}
//5.修改Magicer类
class Magicer extends NamedRole {
private int level;// 魔法等级(范围:1-10)
MagicStick strick;
public int attack() {// 返回法师对敌人攻击的伤害值
return level * 5;
}
public Magicer(String name,int age, int level) {
super(name,age);
this.level = level;
}
public MagicStick getStrick() {
return strick;
}
public void setStrick(MagicStick strick) {
this.strick = strick;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
if (level > 0 && level < 11) {
this.level = level;
} else {
System.out.println("模仿等级已到上限");
}
}
public void practise() {
level++;
if(strick!=null) {
level=level+1+strick.fire();
}
}
}
//6.增加Weapon接口
interface Weapon{
void setSoldier(Soldier s);
int fire();
}
//7.为Weapon增加两个实现类
public class Bolo implements Weapon{//大刀
private Soldier s;
public void setSoldier(Soldier s) {
this.s = s;
}
public int fire() {
if(s.getAge()>=18) {
return 100;
}else {
return 50;
}
}
}
public class Pike implements Weapon{//矛
private Soldier s;
private String name;
public Pike() {}
public Pike(String name) {
this.name = name;
}
public void setSoldier(Soldier s) {
this.s = s;
}
public int fire() {
if(s.getName().equals(name)) {
return 1000;
}else {
return 25;
}
}
}
//8.修改Soldier类
class Soldier extends NamedRole {
private int hurt;
private Weapon weapon;// 战士武器
public Soldier(String name, int age, int hurt) {
super(name, age);
this.hurt = hurt;
}
public int getHurt() {
return hurt;
}
public void setHurt(int hurt) {
this.hurt = hurt;
}
public Weapon getWeapon() {
return weapon;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public Soldier() {
}
public int attack() {
int result = hurt;
if (weapon != null) {
result += weapon.fire();
}
return result;
}
public void practise() {
hurt += 10;
}
}
//9.测试
public class TestGame {
public static void main(String[] args) {
MagicStick ms1 = new GreenStick();
MagicStick ms2 = new BlackStrick();
Magicer m1 = new Magicer("老爹", 50, 10);
Magicer m2 = new Magicer("特鲁", 26, 5);
m1.setStrick(ms1);
m2.setStrick(ms2);
System.out.println(m1.getName() + "伤害值:" + m1.attack());
System.out.println(m2.getName() + "伤害值:" + m2.attack());
m1.practise();
m2.practise();
System.out.println("-----经过训练后-----");
System.out.println(m1.getName() + "伤害值:" + m1.attack());
System.out.println(m2.getName() + "伤害值:" + m2.attack());
System.out.println("------------------");
Weapon w1 = new Bolo();
Weapon w2 = new Pike("成龙");
Soldier s1 = new Soldier("小玉", 15, 200);
Soldier s2 = new Soldier("成龙", 28, 150);
s1.setWeapon(w1);
w1.setSoldier(s1);
s2.setWeapon(w2);
w2.setSoldier(s2);
System.out.println(s1.getName() + "伤害值:" + s1.attack());
System.out.println(s2.getName() + "伤害值:" + s2.attack());
s1.practise();
s2.practise();
System.out.println("-----经过训练后-----");
System.out.println(s1.getName() + "伤害值:" + s1.attack());
System.out.println(s2.getName() + "伤害值:" + s2.attack());
}
}
运行结果:
老爹伤害值:50
特鲁伤害值:25
-----经过训练后-----
老爹伤害值:65
特鲁伤害值:40
------------------
小玉伤害值:250
成龙伤害值:1150
-----经过训练后-----
小玉伤害值:260
成龙伤害值:1160
上一篇: 千锋20200417