20145235 《Java程序设计》第4周学习总结
代码托管截图
教材学习内容总结
继承
•继承:继承基本上就是避免多个类间重复定义共同行为。 我理解的就是:在编写程序的过程中可能会出现部分代码重复的现象,把重复的部分单独定义为一类(父类),在其他代码中(子类)直接继承,这样子类可直接使用父类的方法,子类的对象也可以使用父类的方法,同时避免了大段代码的重复出现的问题。 •扩充:关键字 extend
public class RPG { public static void main (String[] args) { demoSwordsMan(); demoMagician(); } static void demoSwordsMan() { SwordsMan swordsMan = new SwordsMan(); swordsMan.setName("Justin"); swordsMan.setLevel(1); swordsMan.setBlood(200); System.out.printf("剑士:(%s.%d,%d)%n",swordsMan.getName(), swordsMan.getLevel(),swordsMan.getBlood()); } static void demoMagician() { Magician magician = new Magician(); magician.setName("Moinca"); magician.setLevel(1); magician.setBlood(100); System.out.printf("魔法师:(%s,%d,%d)%n",magician.getName(), magician.getLevel(),magician.getBlood()); } }
public class Magician extends Role { public void fight() { System.out.println("魔法攻击"); } public void cure() { System.out.println("魔法治疗"); } }
public class Role{ private String name; private int level; private int blood; public int getBlood() { return blood; } public void setBlood(int blood) { this.blood = blood; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
多态与is-a
Java只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。
Java支持多层继承(继承体系) 。
定义继承需要注意:类与类之间要有所属( " is a " )关系,以前面范例来说,SwordsMan继承了Role,所以SwordsMan is a Role。
代码如下:
public class RPG2 { public static void main(String[] args) { SwordsMan swordsMan = new SwordsMan(); swordsMan.setName("Justin"); swordsMan.setLevel(1); swordsMan.setBlood(200); Magician magician = new Magician(); magician.setName("Monica"); magician.setLevel(1); magician.setBlood(100); showBlood(swordsMan); showBlood(magician); } static void showBlood(Role role) { System.out.printf("%s 血量 %d%n",role.getName(),role.getBlood()); } }
重新定义
在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。因为对父类中已定义的方法执行不满意,所以在子类中重新定义执行。
抽象方法、抽象类
抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。 抽象方法的由来:多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。 抽象类和抽象方法必须用abstract关键字来修饰。
final关键字
如果class前使用了final关键字定义,那么表示这个类是最后一个了,不会再有子类,也就不能被继承。定义方法时,也可以是限定该方法为final,这表示最后一次定义方法了,也就是子类不可以重新定义final方法。final可以修饰类,方法,变量。final修饰的类不可以被继承。final修饰的方法不可以被覆盖。 final修饰的变量是一个常量,只能被赋值一次。内部类只能访问被final修饰的局部变量。
接口定义行为
类要操作接口,必须使用implements关键字。操作某接口时,对接口中的定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract。例如:
public abstract class Fish implements Swimmer { protected String name; public Fish(String name){ this.name = name; } public String getName(){ return name; } @Override public abstract void swim(); }
对于“定义行为”可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public。 类可以操作两个以上的类,也就是拥有两个以上的行为。类可以同时继承某个类,并操作某些接口,接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为。
public class Human implements Swimmer { private String name; public Human(String name){ this.name=name; } public String getName() { return name; } @Override public void swim();{ System.out.printf("人类 %s 游泳%n",name); } }
接口语法细节
使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final,为了方便,也可以省略public static final。
接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。
enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。
教材学习中的问题和解决过程
其他(感悟、思考等,可选)
刚开始这周的任务时,一看到什么“魔法师”,“剑士”……感觉好惊讶,才学Java这么短时间,难道我就要编程游戏了吗!带着这种惊讶我开始了这周学习,然而依我现在的这种菜鸟水平,编程游戏简直是天方夜谈啊。这周一下子觉得时间好紧张,自己想做的事情太多了,想学JAVA,也想做做自己的事情,准备计算机二级,学一学英语,练练字,看看书,运动运动,去感受感受春天的气息。然而很多还是没有时间去做啊。这周感觉java学习任务节奏好快啊,其实前面的有些知识还没好好消化就马上接着新的一周学习。希望这周会变好。