20182303 2019-2020-1 《数据结构与面向对象程序设计》第5周学习总结
教材学习内容总结
继承:从已知类派生一个新类的过程。
- 子类和父类(
is-a
关系):子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
注意: Java 不支持多继承,但支持多重继承。
-
特性:
- 子类拥有父类非
private
的属性、方法。 - 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- 所有的类都是继承于
java.lang.Object
。
- 子类拥有父类非
-
关键词
extends
:只能继承一个类class 父类 {} class 子类 extends 父类 {}
implements
:可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。public interface A { public void eat(); public void sleep(); } public interface B { public void show(); } public class C implements A,B { }
super
&this
super
:引用当前对象的父类。this
:指向自己的引用。
final
:可用来限制继承。- 声明类:
final class 类名 {//类体}
- 声明方法:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
- 声明类:
-
方法重写(override)
- 参数列表必须完全与被重写方法的相同。
- 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为
public
,那么在子类中重写该方法就不能声明为protected
。 - 父类的成员方法只能被它的子类重写。
- 声明为
final
的方法不能被重写。 - 声明为
static
的方法不能被重写,但是能够被再次声明。 - 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为
private
和final
的方法。 - 子类和父类不在同一个包中,那么子类只能够重写父类的声明为
public
和protected
的非final
方法。 - 构造方法不能被重写。
- 如果不能继承一个方法,则不能重写这个方法。
- 当需要在子类中调用父类的被重写方法时,要使用
super
关键字。
-
抽象类
- 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
- 只有抽象类的非抽象子类可以创建对象。
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类中的抽象方法只是声明,不包含方法体,不给出方法的具体实现就是方法的具体功能。
- 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
教材学习中的问题和解决过程
- 问题1:方法重写&方法重载
- 问题1解决方案:
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
- 问题2:对于
protected
理解含糊。 - 问题2解决方案:
- 父类的
protected
成员是包内可见的,并且对子类可见; - 若子类与父类不在同一包中,那么在子类中,子类实例可以访问其从父类继承而来的
protected
方法,而不能访问父类实例的protected
方法。
注:protected
不能用于修饰外部类。
代码调试中的问题和解决过程
- 问题1:敲代码过程中出现最初设想不到位,导致途中需要反复修改的问题。
- 问题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
表示对当前类的父类的调用。 - Which of the following is not a method of the Object class?
A .clone
B .compareTo
C .equals
D .toString
E .all of the above are methods of the Object class
正确答案: B 我的答案: E
解析:clone()
实现对象中各个属性的复制。toString()
将对象转换为字符串。equals()
方法用于将字符串与指定的对象比较。compareTo()
方法用于两个相同数据类型的比较,是接口java.lang.Comparable<T>
中的方法。 - Two children of the same parent class are known as
A .aliases
B .relatives
C .clones
D .brothers
E .siblings
正确答案: E 我的答案: D
解析:siblings:同胞。 - If you instantiate an Abstract class, the class or object you wind up with
A .is also an Abstract class
B .is a normal class
C .is an Interface
D .is a reference to an Object
E .can't exist you cannot instantiate an Abstract class
正确答案: E 我的答案: A
解析:抽象类不能被实例化,但是抽象类和接口可以被扩展。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 254/254 | 2/2 | 21/21 | 开始编写简单的程序 |
第二周 | 132/386 | 1/3 | 26/47 | 学会使用Scanner类 |
第三周 | 632/1018 | 2/5 | 21/68 | 学会使用部分常用类 |
第四周 | 663/1681 | 2/7 | 27/95 | junit测试和编写类 |
第五周 | 1407/3088 | 2/9 | 30/125 | 继承以及继承相关类与关键词 |
-
计划学习时间:25小时
-
实际学习时间:30小时