第五章学习内容

1.子类的继承性

(1)子类和父类在同一包中的继承性

如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。

(2)子类和父类不在同一包中的继承性

当子类和父类不在同一个包中时,父类中的private和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的protected和public访问权限的方法作为子类的方法。

2.子类与对象

子类对象的特点(主要讲继承)

子类创建对象时似乎浪费了一些内存,因为当用子类创建对象时,父类的成员变量也都分配了内存空间,但只将其中一部分作为分配给子类对象的变量,例如,父类中的private成员变量尽管分配了内存空间,也不作为子类对象的变量,当然他们也不是父类某个对象的变量,因为我们根本就没有使用父类创建任何对象。这部分内存似乎成了垃圾一样。但是,实际情况并非如此,我们需注意到,子类中还有一部分方法是从父类继承的,这部分方法却可以操作这部分未继承的变量。

3.成员变量的隐藏和方法重写

(1)成员变量的隐藏

子类隐藏继承的成员变量的特点如下:

  • 子类对象以及子类自己定义的方法操作与父类同名的成员变量是指子类重新声明的这个成员变量。
  • 子类对象仍然可以调用从父类继承的方法操作被子类隐藏的成员变量,也就是说,子类继承的方法所操作的成员变量一定是被子类继承或隐藏的成员变量。

(2)方法重写

要注意的问题:

  • 重写方法既可以操作继承的成员变量、调用继承的方法,也可以操作子类新声明的成员变量、调用新定义的其它方法,但无法操作被子类隐藏的成员变量和方法。如果子类想使用被隐藏的方法或成员变量,必须使用关键词super
  • 当子类未成功重写(覆盖)继承的方法,就会使子类出现方法重载,具体内容见之前的博客第三周java课程学习总结
  • 重写父类的方法时,不允许降低方法的访问权限,但可以提高访问权限(访问限制修饰符按访问权限从高到低的排列顺序是public、protected、友好的、private)。

4.super关键字

(1)用super操作被隐藏的成员变量和方法。

子类一旦隐藏了继承的成员变量,那么子类创建的对象就不在拥有该变量,该变量将归关键字super所拥有,同样,子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用由关键字super负责。

(2)使用super调用父类的构造方法

  • 当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显地致命使用父类的哪个构造方法,子类就调用父类不带参数的构造方法
  • 由于子类不继承父类的构造方法,因此,子类在其构造方法中需使用super来调用父类的构造方法,而且super必须是子类构造方法中的头一条语句,即如果早子类的构造方法中,没有明显地写出super关键字来调用父类的某个构造方法,那么默认地有:super();
  • 若类中定义了一个或多个构造方法,那么Java不提供默认的构造方法(不带参数的构造方法),因此,当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误

5.final关键字

  • final类:可以使用final将类声明为final类。final类不能被继承,即不能有子类。(String类被Java修饰为final类,不允许用户程序扩展此类)
  • final方法:如果用final修饰父类中的一个方法,那么这个方法不允许子类重写,也就是说哦,不允许子类隐藏可以继承的final方法(不允许任何篡改)。
  • 常量:如果成员变量或局部变量被修饰为final,那它就是常量。由于常量在运行期间不允许再发生变化,所以常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值。

6.对象的上转型对象

特点

  • 上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能调用子类新增的方法。(失掉了一些行为)。
  • 上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承的方法或子类重写的实例方法。上转型对象操作子类继承的方法或子类重写的实例方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,当对象的上转型对象调用这个实例方法时一定是调用了子类重写的实例方法。

7.继承与多态

多态案例

class  动物 {
void cry() {
}
}
class 狗 extends 动物 {
void cry() {
System.out.println("汪汪.....");
}
}
class 猫 extends 动物 {
void cry() {
System.out.println("喵喵.....");
}
}
public class Example5_11 {
public static void main(String args[]) {
动物 animal;
animal = new 狗();
animal.cry();
animal=new 猫();
animal.cry();
}
}

运行结果

8.abstract类和abstract方法

(1)注意点

  • abstract类中可以有abstract方法
  • abstract类不能用new运算符创建对象
  • abstract类的子类:如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。
  • abstract类的对象作上转型对象:可以使用abstract类声明对象,尽管不能使用new运算符创建该对象,但该对象可以成为其子类的上转型对象,那么该对象就可以调用子类重写的方法。

9.面向对象编程

  • 使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明的对象作为其子类对象的上转型对象,那么这个上转型对象就可以调用子类重写的方法。
  • 所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。
  • 面向抽象编程的目的是为了应对用户需求的变化,将某个类中经常因需求变化而需要改动的代码从该类中分离出去。面向抽象编程的核心是让类中的每种可能的变化对应的交给抽象类的一个子类去负责,从而让该类的设计者不去关心具体实现,避免所设计的类依赖于具体的实现。面向抽象编程使设计的类容易应对用户需求的变化。

参考资料

1.intValue()的用法

2.Java之Integer类

20175215 2018-2019-2 第四周Java课程学习总结的更多相关文章

  1. JAVA课程学习感想

    JAVA课程学习感想 在学习JAVA之前,我们学习了C语言,汇编语言,数据结构等等.虽然学习了这些,但对于JAVA来说,学习起来不是那么容易,所有的计算机语言有相似的地方,但他们更有不同的地方.对我来 ...

  2. 2019/3/2周末 java集合学习(一)

    Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...

  3. 20175215 2018-2019-2 第六周java课程学习总结

    第七章 内部类与异常类 1.内部类 Java支持在一个类中定义另一个类,这样的类称作内部类,而包含内部类的类成为内部类的外嵌类 内部类和外嵌类之间重要关系如下 内部类的外嵌类的成员变量在内部类中仍然有 ...

  4. 20175215 2018-2019-2 第十一周java课程学习总结

    第13章 Java网络编程 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对 ...

  5. 20175215 2018-2019-2 第十周java课程学习总结

    第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...

  6. 20175215 2018-2019-2 第九周java课程学习总结

    第十一章 JDBC与MySQL数据库 11.1 MySQL数据库管理系统 下载安装过程略 使用的是MySQL 5.6而非5.7 11.2 启动MySQL数据库服务器 启动和root用户过程略 11.3 ...

  7. 20175215 2018-2019-2 第七周java课程学习总结

    第八章 常用实用类 8.1 String类 Java专门提供了用来处理字符序列的String类.String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用S ...

  8. 20175215 2018-2019-2 第三周java课程学习总结

    第三周 一.使用JDB调试java代码(主要内容为断点) 以下文字内容转自使用JDB调试java程序,图片则为自己的截图 我们提倡在Linux命令行下学习Java编程.学习时在Ubuntu Bash中 ...

  9. 《2018面向对象程序设计(java)课程学习进度条》

     学习收获最大的程序阅读或编程任务    课堂/课余学习时间(小时)    发布博客/评论他人博客数量   (阅读/编写)代码行数        周次                  九九乘法表   ...

随机推荐

  1. java -cp 执行jar包里的某个类

    当我们需要测试某个功能时,需要在linux环境下执行某个类的main方法来测试 可以使用java -cp xxx.jar com.MyClass来执行某个类 java -cp test.jar:lib ...

  2. maven引用本地jar,并打包部署

    由于项目需要的一个jar在maven仓库里没有,又不想把jar手动导入仓库.然而百度的几个处理方式都是一样的方法,我却没有一个成功的.于是就请教了大神,大神也是各种测试,终于成功实现了,实现如下: 新 ...

  3. JDK8~13新特性概览

    JDK8 1. 接口default 与 static 关键字 /** * jdk8中接口可以使用声明default和static修饰的方法 * static修饰的方法和普通的方法一样,可以被直接调用 ...

  4. STM32F10xxx_启动模式

    目录 STM32F10xxx_启动模式 更新记录 启动配置 参考: STM32F10xxx_启动模式 更新记录 version status description date author V1.0 ...

  5. 淘宝flexible.js的使用

    首先大家最关注的怎么使用,原理不原理是后面的事 比如设计稿量来的宽度是100px 那么我们布局的时候,就这么写{width:1.3333rem},1.3333rem是由100/75算出来的,以此类推2 ...

  6. 请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 (黄色部分即02-236-9655/9659 ) ( 测试面试题)

    请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 答: package test1; import java.uti ...

  7. 理解js异步编程

    Promise 背景 javascript语言的一大特点就是单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码,也就是说,同一个时间只能做一件事. 怎么做到异步编程?回调函数.直到no ...

  8. MixNet学习笔记

    最近,谷歌使用了AutoML,推出了一种新网络:MixNet,其论文为<MixNet: Mixed Depthwise Convolutional Kernels>.其主要创新点是,研究不 ...

  9. 会了docker你又多了一个谈资(上)

    相信有到现在为止还是有很多同学只是听说过docker,但还不了解docker.也很想学习,但是又不知道从何入手,工作中又接触不到,而自己又懒得去翻阅各种学习资料,那么,读完本文,我保证,docker的 ...

  10. Fiddler debug 拦截文件

    前言 前端每次本地调试的需要重新build文件,而且如果当前文件是在另外一个项目中使用,则还需要拷贝到另外一个项目下面.这个工作很耗时.如果使用替换包,可以节省很多时间,也便于开发. 解决方案 用Fi ...