20165230 2017-2018-2 《Java程序设计》第4周学习总结

本文总结了Java中子类与继承的概念,包括子类定义、继承特性、this与super关键字使用、final与abstract关键字作用及接口实现等内容,并分享了学习过程中遇到的问题及其解决办法。

20165230 2017-2018-2 《Java程序设计》第4周学习总结

教材学习内容总结

子类与继承

  • 通过class 子类名 extends 父类名定义子类。子类只能继承一个父类,关键字为extends,子类和父类之间有一个is-a关系

  • 继承:子类的实例方法可操作父类的成员变量,也可调用父类中的方法;但不继承父类的构造方法
  • 子类与父类在不同包时,只继承protected和public访问权限的成员变量与方法。
    1296643-20180324110603271-726196401.png

  • 子类继承父类之后,定义与父类中相同的方法名字、参数个数、参数类型,即为重写。通过重写可隐藏已继承的方法。
  • 如果想使用被隐藏的方法或成员变量,可以在调用方法前,加上super关键字,调用的父类方法不能是private
  • thissuper只能择一调用,而且一定要在构造函数第一行执行。
  • final关键字定义的class类,不会再有子类,不能被继承。用final关键字声明常量
  • 对象的上转型对象
  1. 不能操作子类新增的成员变量,
  2. 不能调用新增的方法,
  3. 可访问调用子类继承的变量与方法(包括隐藏的变量)
  4. 若子类重写父类的方法,上转型对象一定是调用的子类重写的发方法
  • abstract类与abstract方法
  1. abstract类中可以有非abstract方法
  2. 非abstract类不能有abstract方法,若是abstract类的子类,必须重写父类的abstract方法
  3. abstract类不能创建对象,可声明对象,该对象可称为子类的上转型对象

    接口与实现

  • 接口:用interface关键字定义,类要操作接口,必须使用implements关键字
  • 接口包括public static final的常量和public abstract抽象方法
  • 类可以同时继承某个类,并操作某些接口
  • 抽象类既可以重写接口的方法,也可拥有接口的方法
  • 接口可被继承
  • abstract类与接口的比较
  1. abstract类和接口都可以有abstract方法
  2. 接口中只可以有常量,不能有变量;abstract类中都可以有
  3. abstract类中可以有非abstract方法,接口不可以

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

  • 问题1:P123中,为什么颠倒次序以后结果会改变?
  • 问题1解决方案:通过学习教学视频,学习到先调g方法时,此时super管的n里没有赋值,n=0,在循环体里i<=0不开始循环,返回sum的初值0
  • 问题2: p146页中提到重写接口方法时要明显用public来修饰,否则降低权限是不允许的。为什么?
  • 问题2解决方案:在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义。如果缩小了权限,就会发生错误。

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

  • 问题1:调试example5_1时,把Student类中的printf输错成了println,显示如下错误
    1296643-20180324110319842-827608252.png

  • 问题1解决方案:通过网上查询学习到println,printf,print的区别如下:

    1. print将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后。
    2. println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。
    3. printf是格式化输出的形式。
  • 问题2:在调试example5_6时,显示使用已过时的API
    1296643-20180324110335605-1002333401.png

  • 问题2解决方案:通过在网上查询解决方法,发现可以忽略错误提示,直接运行。
  • 问题3:在调试p136的代码时,显示SIMOfChinaUnicom不是抽象的
    1296643-20180324110437639-1529652387.png

  • 问题3解决方案:发现是SIMOfChinaUnicom.java文件中 giveCorpName缺少了一个r
  • 问题5:在调试example6_3时,出现调试问题
    1296643-20180324110458247-1612316561.png

  • 问题5解决方案:通过反复检查,发现是少了对controlAirTemperature的定义:public void controlAirTemperature()
  • 问题6:在调试例子16时,出现错误
    1296643-20180324110508328-951497778.png

  • 问题6解决方案:在输入变量名时将大写字母写成小写字母,重新编写新的java源文件编译通过
    1296643-20180324110540047-1365782287.png
    1296643-20180324110548025-311884160.png

代码托管

1296643-20180324110611724-350553005.png

上周考试错题总结

  • 错题1
    1296643-20180324110629944-1499688709.png

该题算得正确答案应该为10,但是没有选项,题目错误。

  • 错题2
    1296643-20180324110642087-1464870198.png

对运算精度规则不熟悉,此题应该是如果表达式中最高精度为double 则按双精度进行运算。如果表达式中最高精度低于int型整数,才按int精度进行运算

  • 错题3
    1296643-20180324110648415-71591853.png

对Float不了解,以为与float是一样的。但是他们不一样。Float是封装类,不是基本数据类型

  • 错题4
    1296643-20180324110659192-355132987.png

与之前书上的例子没有理解透彻,书上的例子提到的的是float型数据与double型数据的实际精度不同,float保留8位有效数字,double型保留16位有效数字。double型的y的实际值小于float型的实际值。但此处是x==y,与x=y不同。由答案解析可知,是通过比较其二进制,两者是相等的

  • 错题5
    1296643-20180324110705822-2114709083.png

没有分清数组初始化在c语言与java中的区别。A选项在C语言里是可以的,但是在java中不可以。会显示java.lang.String无法转换为char[]
1296643-20180324114139831-397059452.png
java数组里面存的是对象的引用,数组初始化式只能用于声明同时赋值的情况,单引号是字符char,双引号是字符串string,要想将hello字符串赋值进char中可以通过

String str=“hahah”;//创建字符串
char[] chArray=new char[10];//创建一个char空数组
chArray=str.toCharArray();//将字符串赋值进去
  • 错题6
    1296643-20180324110712087-1150805766.png

该题看书上介绍是选择排序,理所应该的以为不是冒泡排序,没有仔细的去考察,也是冒泡排序

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

  • 本周代码量比上周增加了不少,敲代码的过程越来越熟悉,使用了idea,比在虚拟机中的vim编代码时方便很多,很多命令均可用tab键补全,要熟练在idea下运行

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周13/131/3019/19
第二周426/4263/3012/12
第三周562/5624/3015/15
第四周1552/19585/3016/16

参考资料

转载于:https://www.cnblogs.com/tiankunye/p/8637979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值