20155201 2016-2017-2 《Java程序设计》第四周学习总结

it2022-05-09  38

20155201 2016-2017-2 《Java程序设计》第四周学习总结

教材学习内容总结

- 第六章要点:

继承:面向对象中,子类继承父类,避免重复的行为定义。继承基本上就是避免多个类重复定义共同行为。P158-159为剑士和魔法士定义类时出现共同的重复部分 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; }

以上部分是重复部分,使用继承语句可以避免重复敲代码:

public class Swordsman extends Role{ ...; }

这句语句的意思是SwordsMan继承Role类。

抽象方法:如果某方法区块中真的没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接;结束即可。 public abstract class Role{ public abstract void fight(); } 将父类的类成员定义为public时,会完全开放成员的访问权限;如果只想让子类直接存取类成员,可以定义类成员为protected: public class name{ protected String name1; protected int name2; }

被声明为protected类型的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。类中有成员被声明为protected后,IDEA中图标发生了变化。

权限关键字与范围:

关键字类内部相同包类不同包类public可存取可存取可存取protected可存取可存取子类可存取无可存取可存取不可存取private可存取不可存取不可存取 如果想取得父类中的方法定义,可以在调用方法前,加上super关键字: public String roString(){ return super.toString(); } 在Java中,子类只能继承一个父类,如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object,相当于 puclic class name extends Object{ }

在Java中,任何类追溯至最上层父类,一定就是java.lang.Object,任何类型的对象,都“是一种”Object。

- 第七章要点

接口:书中例子:“所有东西”都会“游泳”,代表所有东西都可以拥有“游泳”,而不是某种东西专属,类似继承。定义方法如下: public interface name{ public abstract void name2(); }

类中操作接口,使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法:

public class name3 extends name1 impelments name1{ ... }

二是再度将该方法标示为abstract:

public abstract class name3 implements name4{ ... } 在Java中,可使用interface来定义抽象的行为与外观,如接口中的方法可声明为public abstract : public interface Swimmer{ public abstract void swim(); }

接口中的方法有操作时,一定得是公开且抽象,为了方便,你也可以省略public abstract:

public interface swimmer{ void main(); } 在interface中可以定义常数,java中经常见到在接口中定义这类常数,称为枚举常数。

教材学习中的问题和解决过程

6.4课后练习中第1、2题我认为应该是选B显示some Service,答案是C。解决:

翻阅之前教材6.2.3再看构造函数内容,得到如下解释:如果子类构造函数中没有指定执行父类中哪个构造函数,默认会先调用父类中无参数构造函数。按照书上解释应该选父类中输出some service,但@Override书上的定义是“检查是否重新定义父类方法”,而我在网上查到的含义是重写函数,相当于与父类函数无关,这样答案选C就有理由了。还是望老师再解释下 。

教材P202页Airplane.java应该命名为Seaplane.java

代码调试中的问题和解决过程

在编写P186页ConsoleGame代码时,继承extends GuessGame时出现错误,应该是abstract定义权限问题。

最开始新建项目时我并没有选择在package下新建Java文件,所以我只好把GuessGame的abstract定义修改,如下:

public class GuessGame { public void go(){ int number=(int) (Math.random()*10); int guess; do{ print("输入数字:"); guess=nextInt(); }while (guess!=number); println("猜中了!"); } public void println(String text){ print(text+"\n"); } public void print(String text){ } public int nextInt(){ return nextInt(); } }

之后ConsoleGame成功运行,截图如下:

P203页代码Ocean.java中飞鱼应该不仅游泳,还会飞,修改代码如下: public class Ocean2 { public static void main(String[] args) { doSwim(new Seaplane("空军零号")); doFly(new FlyingFish("甚平")); } static void doSwim(Swimmer swimmer){ swimmer.swim(); } static void doFly(FlyingFish flyer){ flyer.fly(); flyer.swim(); } }

代码托管

代码提交过程截图: 运行 git log --pretty=format:"%h - %an,
转载请注明原文地址: https://win8.8miu.com/read-1489092.html

最新回复(0)