发表于: 2018-01-31 01:17:54

2 573


今天完成的事情:

看了看内存解析的内容,巩固了下类和对象的内容

进入到接口与继承学习中,做了几个练习。

1.接口

package com.java.setask;

public interface Healer {
public void heal();
}
package com.java.setask;

/*
设计一个治疗者接口:Healer

该接口声明有方法: heal()

设计一个Support类,代表辅助英雄,继承Hero类,同时实现了Healer这个接口
*/
public class Support extends Hero implements Healer{


Support(String name, float hp, float armor, int moveSpeed) {
super(name, hp, armor, moveSpeed);
   }

/*Support(String name,float hp,float armor,int moveSpeed){
       this.name=name;
       this.hp=hp;
       this.armor=armor;
       this.moveSpeed=moveSpeed;
   }*/
   //上面注释的是开始未做到后面接口部分的练习时写的,后面的练习中因为在父类中定义了构造方法,所以这里要用super()?,因为出现了实参和形参长度不同,这个暂未明白

   public void heal() {
System.out.println(name+"进行了治疗");
   }

public static void main(String[] args){
Support qinNv=new Support("琴女",300f,35f,40);
       qinNv.heal();
   }

}

2.方法重写

package com.java.setask;

public class Item {
String name;
   int price;
   public void buy(){
System.out.println("购买了"+name);
   }
public void effect(){
System.out.println("使用了"+name);
   }
}
package com.java.setask;
/*
设计一个类MagicPotion 蓝瓶,继承Item, 重写effect方法
并输出 “蓝瓶使用后,可以回魔法”
*/
public class MagicPotion extends Item{
public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
   }
public static void main(String[] args){
MagicPotion bule=new MagicPotion();
       bule.effect();
   }
}

3.多态

package com.java.setask;
/*
1. 设计一个接口
接口叫做Mortal,其中有一个方法叫做die
*/
public interface Mortal {
public void die();
}

package com.java.setask;
/*
2. 实现接口
分别让ADHero,APHero,ADAPHero这三个类,实现Motal接口,不同的类实现die方法的时候,都打印出不一样的字符串
*/
public class ADHero extends Hero implements Mortal{
ADHero(String name, float hp, float armor, int moveSpeed) {
super(name, hp, armor, moveSpeed);//这里发现IDEA自动使用了super(),这个意思和this()类似,不过是调用了父类的
   }

public void die(){
System.out.println("物理输出"+name+"死亡了");
   }
}
package com.java.setask;
/*
2. 实现接口
分别让ADHero,APHero,ADAPHero这三个类,实现Motal接口,不同的类实现die方法的时候,都打印出不一样的字符串
*/
public class APHero extends Hero implements Mortal {
APHero(String name, float hp, float armor, int moveSpeed) {
super(name, hp, armor, moveSpeed);//这里发现IDEA自动使用了super(),这个意思和this()类似,不过是调用了父类的
   }

public void die(){
System.out.println("法师"+name+"死掉了");
   }
}
package com.java.setask;
/*
2. 实现接口
分别让ADHero,APHero,ADAPHero这三个类,实现Motal接口,不同的类实现die方法的时候,都打印出不一样的字符串
*/
public class ADAPHero extends Hero implements Mortal{
ADAPHero(String name, float hp, float armor, int moveSpeed) {
super(name, hp, armor, moveSpeed);//这里发现IDEA自动使用了super(),这个意思和this()类似,不过是调用了父类的
   }

public void die(){
System.out.println("酱油"+name+"死掉了");
   }
}
package com.java.setask;
/*
3. 为Hero类,添加一个方法,在这个方法中调用 m的die方法。

public void kill(Mortal m)


4. 在主方法中
首先实例化出一个Hero对象:盖伦
然后实例化出3个对象,分别是ADHero,APHero,ADAPHero的实例
然后让盖伦 kill 这3个对象
*/
public class Hero implements Mortal {
String name;
   float hp;
   float armor;
   int moveSpeed;
   Hero(String name,float hp,float armor,int moveSpeed){
this.name=name;
       this.hp=hp;
       this.armor=armor;
       this.moveSpeed=moveSpeed;
   }

public void kill(Mortal m){
System.out.println(this.name+"进行了范围击杀");
       m.die();
   }

public void die(){
System.out.println(name+"自杀了");
   }

public static void main(String[] args){
Hero g=new Hero("盖伦",400f,53f,35);
       Hero ad=new ADHero("寒冰",300f,23f,40);
       Hero ap=new APHero("火女",300f,20f,38);
       Hero adap=new ADAPHero("EZ",300f,35f,40);
       g.kill(ad);
       g.kill(ap);
       g.kill(adap);

   }
}




明天计划的事情:

继续学习接口与继承的内容,同时加深下多态的理解和对象转型的方面



遇到的问题:

1.为什么父类中写了构造方法后,子类中也需要写构造方法?不是可以继承成员变量和方法么?只是因为类名不同?

2.练习1接口中注释掉的部分和使用super()有什么区别,为什么会报错?为什么会产生参数长度不正确这个错误



收获:

☆1.了解到了java程序在内存中的运行机制

   2.学习了接口的使用和编写方法:使用implements实现接口

   3.对象转型的一些情况:子类转父类一定行,父类转子类看情况,无继承关系的两个类转型一定失败

   4.重写方法和他的作用。

☆5.多态的一些概念和使用



时间实在太紧张了,日志内容不够充实,先这样吧~



返回列表 返回列表
评论

    分享到