20182318 2019-2020-1 《数据结构与面向对象程序设计》第5周学习总结

20182318 2019-2020-1 《数据结构与面向对象程序设计》第5周学习总结

教材学习内容总结

  • 继承

继承是从已有类派生一个新类的过程
继承的目的之一是复用已有的软件
继承在父类与子类之间建立了is-a的关系
类的继承格式
class 父类{};
class 子类 extends 父类{};
interface 父类{};
class 子类 implements 父类{};

  • super和this

super:可以通过super来实现对父类的访问,用来引用当前对象的父类
this:指向自己的引用

  • 构造函数

  • object类

object类在java标准类库java.lang包中定义

  • 方法重载:

大大提升代码的利用率,是总体结构更为精简

  • protected修饰符

(为了让子类能够访问并且不违反封装性原则)。父类中的变量和方法被声明为protected可见性时,子类就可以使用。

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

问题1:为什么Java中main函数是静态?
问题1解决方案:main函数其实也是所在类的一个方法,就比如一个类是test,那么该类的main其实就是test.main(String[] args),众所周知如果一个方法不是静态的,则要先实例化该类,比如要这样 A a=new A();
然后才能调用 a.main();

而这对于运行一个程序的主函数来说是不现实的,所以比如把main函数定义为static,使a.main()可以直接被调用。

因此,java规定了main函数必须是静态的

问题2:构造方法和构造函数的用处和特别
问题2的解决方案:

  • 构造方法的作用:

构造方法作用:
1).创建对象,凡是必须和new一起使用.

2).对对象进行初始化.

  • 构造函数与普通函数的区别:

(1). 一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。

(2). 构造函数是在对象建立时由 jvm 调用, 给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。

(3). 普通函数可以使用对象多次调用,构造函数就在创建对象时调用。

(4). 构造函数的函数名要与类名一样,而普通的函数只要符合标识符的命名规则即可

  • 构造函数要注意的细节:

(1). 当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。
备注:可以通过 javap 命令验证。
(2). 在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。构造函数没有返回值类型。

  • 构造代码块:

构造代码块作用:给所有的对象进行统一的初始化。
构造函数没有返回值类型。

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

  • 问题1:客户端中“cobar”显示红色,且按照小灯泡指示无法解决

  • 问题1解决方案:原来是客户端和服务器不在同一个网络上。也就是说客户端没有与服务器建立网络接口,导致两者之间信息无法传递。在客户端中将服务器的相应的IP地址输入即可

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  1. The instruction super( ); does which of the following?

A
.
calls the method super as defined in the current class

B
.
calls the method super as defined in the current class'parent class

C
.
calls the method super as defined in java.lang

D
.
calls the constructor as defined in the current class
E
.
calls the constructor as defined in the current class'parent class
正确答案: E 你的答案: B

答案解析:超指令表示对当前类的父类中某些内容的调用。因为没有消息,只有super(),所以它是父类构造函数的调用。

  1. Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by

A
.
importing classes

B
.
implementing interfaces

C
.
overriding parent class methods

D
.
creating aliases

E
.
using public rather than protected or private modifiers

正确答案: B 你的答案: E

答案解析:因为一个类可以实现任意数量的接口,所以这个类本质上使用接口类,就好像这些接口是在这个类中定义的一样。这个类继承了接口的方法和常量。此外,该类可以扩展另一个类,从而直接或间接地继承多个类。这与多重继承并不完全相同,但它与Java的概念非常接近。

  1. All classes in Java are directly or indirectly subclasses of the ________ class.

A
.
Wrapper

B
.
String

C
.
Reference

D
.
this

E
.
Object

正确答案: E 你的答案: D

答案解析:Java要求所有的类都有一个父类。如果一个类没有扩展另一个类,那么默认情况下,它会扩展对象类。因此,对象类是Java中所有其他类的父类或祖先。

结对及互评

  • 继承中子父类使用的讨论
  • 迭代器的使用

点评:

  • 博客中值得学习的或问题:

  • 内容丰富

  • 问题详尽

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况
  • 上周博客互评情况

其他(感悟、思考等,可选)

学习还需下真功夫
我太难了,感觉自己脑子不够用

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第五周 453/1000 3/7 22/60

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:24小时

  • 实际学习时间:20小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2019-10-07 19:21  J~oker  阅读(148)  评论(1编辑  收藏  举报