发表于: 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.多态的一些概念和使用
时间实在太紧张了,日志内容不够充实,先这样吧~
评论