学号 2017-2018-20172309 《程序设计与数据结构》第7周学习总结

学号 2017-2018-20172309 《程序设计与数据结构》第7周学习总结

教材学习内容总结

  • 继承?
    1.继承是全部OOP(面向对象编程)不可或缺的部分。在Java语言中使用extends关键字来表示继承关系。在建立一个类时,老是在继承,若没有明确的指出要继承的类,老是隐式地使用Object进行继承。好比:
>     class Thing
>     {
>       //whatever
>      }
> 与
>      class Thing extends Object
>      {
>         //whatever
>      }
> 是同样的。
  1. 在Java中,只容许单继承。也就是说一个类作多只能显示地继承一个父类。可是一个类却能够被多个类继承,也就是说一个类能够拥有多个子类。
  2. 子类继承父类的成员变量。html

    当子类继承了某个类以后,可使用父类中的成员变量,可是不是彻底继承父类中的成员变量。规则以下:
    1.可以继承父类的public和protected成员变量;不可以直接继承父类的private成员变量;//protected修饰符封装性介于public与private之间。声明为protected可见性变量和方法除了可被子类引用外,还能够由同一个包内的任何类使用
    2.对于父类的包访问权限成员变量,若是子类和父类在同一个包下,则子类可以继承;不然,子类不可以继承;
    3.对于子类能够继承的父类成员变量,若是在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。若是要在子类中访问父类中同名成员变量,须要使用super关键字来进行引用。java

  3. 子类继承父类之中的方法。git

    一样的,子类也并不是彻底的继承父类中的方法,规则以下:
    1. 可以继承父类的public和protected成员方法;不可以直接继承父类的private成员方法;
    2. 对于父类的包访问权限成员方法,若是子类和父类在同一个包下,则子类可以继承;不然,子类不可以继承;
    3. 对于子类能够继承的父类成员方法,若是在子类中出现了同名称的成员方法,则称为覆盖现象,即子类的成员方法会覆盖掉父类的同名成员方法。若是要在子类中访问父类中同名成员方法,须要使用super关键字来进行引用。
  • super引用?
    1. 在子类中,父类的构造方法不能用对象名.方法名使用,但可用super引用调用父类的构造方法。
    2. 在继承关系之中,若是要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,以后再调用子类构造,为子类之中的属性初始化
    >      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;
    1. 在类定义声明头中,可用abstract修饰符将一个类声明为抽象类。包含一个或多个抽象方法的类必须被声明为抽象类。
    2. 每个抽象方法都用abstract修饰符,但抽象类没必要必定包含抽象方法。abstract只能修饰类和方法,不能修饰变量!
    3. 通常将抽象类设计在较高的类层次上。

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

  • 问题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,可是能够间接的获得他
  • 问题2:怎么理解抽象类,它的做用是什么?
  • 问题2解决方案:
    资料一 资料二

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

  • 问题1:在作习题PP9.1时,出现了运行成功,但都是反面的状况。
  • 问题1解决方案:数据结构

    出现这种状况我猜缘由可能有两个:
    1. 根本就没有运行投硬币方法,致使值一直为初始值0.
    2. 运行了投硬币方法,且投出反面0后其余硬币也随之赋值为0.

解决这个问题我想只要多运行几回就行,若是一直都是反面那么久能够排除第二种状况了(由于只要投了,就会有正面的状况出现。除非你踩到狗屎了!)试了几回后能够肯定是状况一了。可是问题出在哪里呢?子类代码:
运行代码:
想了许久发现上面两种状况都不是,是由于没有进行赋值!!!
才致使它的值一直为初始值0学习

  1. 父类
  2. 子类
  3. 驱动类
  • 问题2:在作PP9.3的时候出现两个问题:
    - 1.我想用数组表示图书、小说、杂志、学术刊物
    java > int [] list ={1,2,3,4}; //数组初始值表里面能够直接放数字,那我可不能够这样呢? > String [] list ={books, novel, magazine, journal };
    答案是否认的!
    出现:
    出现上述错误是由于未对里面的元素进行初始化,只须要:

    - 2. 预期的输出结果是:
    > books 有 100 页, 且有 200 个关键词。
    > noval 有 200 页, 且有 300 个关键词。
    > ...this

    输出的的地址,咱们应该编写一个方法让要表示的表示出来。即:toString()的方法![](https://images2018.cnblogs.com/blog/1333063/201804/1333063-20180422200835724-1135343756.png)
    才会出现预期的效果:
  1. 继承了Book2的子类
  2. 驱动类

代码托管


上周考试错题总结

  • 错题1及缘由,理解状况:
    设计

    对于第一种状况,a和b都将被声明 成数组。对于第二种,c和d都将被声明成整数,但对于d,他将被声明成数组。3d

  • 错题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

参考资料

1.继承的资料汇总
2.Java关键字中的super与this的区别
3.super关键字

相关文章
相关标签/搜索