学号 2017-2018-20172309 《程序设计与数据结构》第7周学习总结
学号 2017-2018-20172309 《程序设计与数据结构》第7周学习总结
教材学习内容总结
- 继承?
1.继承是所有OOP(面向对象编程)不可或缺的部分。在Java语言中使用extends关键字来表示继承关系。在创建一个类时,总是在继承,若没有明确的指出要继承的类,总是隐式地使用Object进行继承。比如:
> class Thing
> {
> //whatever
> }
> 与
> class Thing extends Object
> {
> //whatever
> }
> 是一样的。
- 在Java中,只允许单继承。也就是说一个类做多只能显示地继承一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。
- 子类继承父类的成员变量。
当子类继承了某个类之后,可以使用父类中的成员变量,但是不是完全继承父类中的成员变量。规则如下:
1.能够继承父类的public和protected成员变量;不能够直接继承父类的private成员变量;//protected修饰符封装性介于public与private之间。声明为protected可见性变量和方法除了可被子类引用外,还可以由同一个包内的任何类使用
2.对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
3.对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
- 子类继承父类之中的方法。
同样的,子类也并非完全的继承父类中的方法,规则如下:
- 能够继承父类的public和protected成员方法;不能够直接继承父类的private成员方法;
- 对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
- 对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖现象,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
- super引用?
- 在子类中,父类的构造方法不能用对象名.方法名使用,但可用super引用调用父类的构造方法。
- 在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化。
> class A {
> public A (String msg) { //父类的构建
> System.out.println("*********************");
> }
> }
>
>
> class B extends A {
> public B() { //子类的构造
> System.out.println("####################");
> }
> }
>
>
> public class TestDemo {
> public static void main(String []args) {
> B b =new B(); //实例化子类对象
> }
> }
> 运行结果:
> ******************************
> ############################## //这个时候虽然实例化的是子类对象,但是发现它会默认先执行父类构造,调用父类构造的方法体执行,而后再实例化子类对象,调用子类的构造方法。而这个时候,对于子类的构造而言,就相当于隐含了一个super()的形式.
3.super主要有两种用法:
1.super.成员变量/supe.成员方法;
2.super(parameter1,paremeter2, ... );
第一种用法主要用来在子类中调用父类的同名成员变量或者方法;第二种主要用在子类的构造器中显示地调用父类的构造器,要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。
- 抽象类:abstract;
- 在类定义声明头中,可用abstract修饰符将一个类声明为抽象类。包含一个或多个抽象方法的类必须被声明为抽象类。
- 每一个抽象方法都用abstract修饰符,但抽象类不必一定包含抽象方法。abstract只能修饰类和方法,不能修饰变量!
- 一般将抽象类设计在较高的类层次上。
教材学习中的问题和解决过程
- 问题1:子类不能调用父类中的私有方法?那如何调用?
- 问题1解决方案:废话不多说,上例子:
> public class Person {
> private String name;//name是私有的!!!
> public Person(String name)
> {
> this.name=name;
> }
> public String getName()
> {
> return name;
> }
>
>
> public class Student extends Person { //Student类继承Person类
> private int id;
> public Student(String name, int id)
> {
> super(name)
> this.id = id ;
> }
> }//Student类内没name字段,但是它内部Person对象有,我们如何把它钓出来呢?
>
>
> public static void main(String []args) {
> Student s = new Student("你爸爸",99);
> System.out.println(s.getName()); //结果就是:你爸爸
> System.out.println(s.name); //此时出现错误:ERROR:name has private access in Person.
> } //我们不可以直接的得到name,但是可以间接的得到他
代码调试中的问题和解决过程
- 问题1:在做习题PP9.1时,出现了运行成功,但都是反面的情况。
。 - 问题1解决方案:
出现这种情况我猜原因可能有两个:
- 根本就没有运行投硬币方法,导致值一直为初始值0.
- 运行了投硬币方法,且投出反面0后其他硬币也随之赋值为0.
解决这个问题我想只要多运行几次就行,如果一直都是反面那么久可以排除第二种情况了(因为只要投了,就会有正面的情况出现。除非你踩到狗屎了!)试了几次后可以确定是情况一了。但是问题出在哪里呢?子类代码:
运行代码:
想了许久发现上面两种情况都不是,是因为没有进行赋值!!!
才导致它的值一直为初始值0
-
问题2:在做PP9.3的时候出现两个问题:
- 1.我想用数组表示图书、小说、杂志、学术刊物。
java > int [] list ={1,2,3,4}; //数组初始值表里面可以直接放数字,那我可不可以这样呢? > String [] list ={books, novel, magazine, journal };
答案是否定的!
出现:
出现上述错误是因为未对里面的元素进行初始化,只需要:
- 2. 预期的输出结果是:
> books 有 100 页, 且有 200 个关键词。
> noval 有 200 页, 且有 300 个关键词。
> ...输出的的地址,我们应该编写一个方法让要表示的表示出来。即:toString()的方法![](https://images2018.cnblogs.com/blog/1333063/201804/1333063-20180422200835724-1135343756.png)
才会出现预期的效果:
代码托管
上周考试错题总结
- 错题1及原因,理解情况:
对于第一种情况,a和b都将被声明 成数组。对于第二种,c和d都将被声明成整数,但对于d,他将被声明成数组。
- 错题2及原因,理解情况:
"="是个复制运算符,他会将右边的赋值给左边。当数组a与b中的每个元素都一样时,返回true,否则false.
- 错题3及原因,理解情况:
数组是对象,因此它们从对象类继承。对象类有一个toString方法。但是,对象的toString方法不返回存储在对象中的值,而是返回引用变量的值。因此,在数组中使用的toString不会返回存储在数组中的值,而是返回一组毫无意义的字符。
- 错题4及原因,理解情况:
索引只能时自然整数!!!!
- 错题5及原因,理解情况:
ArrayList是作为数组实现的,只要其中一个只是访问ArrayList的元素,效率与数组的效率是一样的。但是,当对ArrayList的前部分进行插入或删除时,就会发生大量的元素复制,从而降低其效率。
点评模板:
-
博客中值得学习的或问题:
- 优点:
- 博客版面比起上一次有很大的进步,可见花功夫之深。
- 排版精美,课本总结简短、有条理。
- 提出的问题结合课本以及以前的内容,值得学习。
- 值得改进的地方:
- 没有本周代码量的图片。
- 背景不太建议选深色的,有些字都不太能看清楚。虽然很好看, -
代码中值得学习的或问题:
- 值得学习:
- 运用数组解决问题、既解决问题也复习了以前的内容,仍让学到的东西记住更深刻!。
- 嗯~博主太厉害,只有一个代码出现的问题,导致我找不到更多的优点!!
- 值得改进的地方:
- 无。
- 值得学习:
-
基于评分标准,我给本博客打分:14分。(总分16分)
点评过的同学博客和代码
其他(感悟、思考等,可选)
这章比起前一章学起来比较吃力,个人感觉是这一章的东西太抽象化其实是自己的功力不够啦。这章还真有抽象类、抽象方法/(ㄒoㄒ)/~~虽然这章难,但我不会让自己放弃的!这周的任务比较繁重,因为比平时多了五个实验。实验都是些以前没接触到的东西,让我印象最深刻的是实验四,因为为了它,我熬夜到了两点,发誓不弄好它不睡觉!!这个实验让我明白了toString()方法的重要性,也让我解决了上面PP9.3以前不能解决的问题。哈哈哈~~贼开心!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 075/200 | 1/1 | 05/20 | |
第二周 | 560/500 | 1/2 | 13/38 | |
第三周 | 972/1000 | 1/4 | 21/60 | |
第四周 | 694/1666 | 1/5 | 21/90 | |
第五周 | 1544/3095 | 1/6 | 30/90 | |
第六周 | 600/3627 | 1/7 | 30/120 | |
第七周 | 544/4200 | 2/9 | 20/140 |