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脚本的运行结果截图)
上周考试错题总结
- 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(),所以它是父类构造函数的调用。
- 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的概念非常接近。
- 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小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)