上一篇文章我跟大家聊了一下"封装",今天我们聊一下同样作为java语言三大特征之一的"继承"。

简单说"继承"就是从一个已知类派生出新类的过程,"继承"既体现了对已有类的功能复用又强调了发展的概念。下面我们从这两个方面分别进行阐述,先说"继承"本身都继承了哪些父类的内容,我们看一个实例。

这是一个非常简单的关于"继承"的描述,子类BMW通过继承Car类拥有了paint方法。通过这个例子我们看到了,作为子类能够继承父类的功能,体现了"继承"在代码"复用"上的价值,同样,成员属性也是能够继承的。但是并不是所有的功能和属性子类都能继承,如果父类中把功能限定为"私有"的范围限定,则子类是无法进行继承的,这是对"封装"的尊重。

除了普通功能,作为类初始化重要成员的"构造器"是否能被子类继承呢?答案是否定的,子类只能调用父类的构造器,不能继承它,我们看一个实例。

本例BMW的"构造器"通过super完成了对父类Car"构造器"的调用。虽然例子演示了如何完成"构造器"的调用,但是还有一些内容需要额外强调一下。第一,如果子类没有显示调用父类的"构造器",则子类会默认调用父类中无参的"构造器",如果父类中没有无参"构造器",子类的默认调用会导致报错。第二,super在子类的"构造器"中一定是第一句话,因为只有在完成父类的初始化之后,才能继续子类的初始化。第三,建议大家在编写程序时为每个类都写一个无参的构造器,这将是一个很好的编程习惯,同时子类的super要显示调用,尽量不用默认的super调用。

如果一个子类只是继承了父类的内容,没有任何"发展",那么这个继承本身是没有价值的。"发展"体现在哪些方面呢?主要体现在增加功能和改变已有功能两个方面上。增加功能无非就是在子类中定义新的功能方法,那么改变则体现在一个新的概念上,这个概念叫做"方法重写",我们看一个实例。

例子中子类BMW重新定义了paint方法,以便于适合子类的功能要求,这就是"方法重写",也描述了修改已有功能的含义。

"方法重写"也有叫"方法覆盖"的,在规则上总结一下,有一个"前提"三个"相同"两个"规定"。"前提"是在继承体系结构下,三个"相同"分别是名字相同、参数列表相同和返回值类型相同,两个"规定"分别是方法的范围限定不能小于重写前,同时不能抛出更多的"异常"(后续文章中描述)。在名字和参数列表都相同的情况下,如果返回值类型不相同,那么系统会报错。

在实例中我们还看到了super的另一个用法,就是调用已经被重写的父类方法。除了能用super调用被子类重写的方法,super还能调用被子类隐藏的属性,所谓"隐藏"属性,就是在子类中定义了跟父类一样的属性,方法也存在"隐藏",我将在关于"多态"的文章中跟大家探讨。

另外需要补充说明的就是java语言本身是"单继承"体系结构,简单说就是一次只能继承一个其他的类,或者说只能有一个直接父类。所有的java类均继承或间接继承自Object类,我们在上一篇文章中提到的toString方法就是定义在Object类中的。

java程序试岗内容_java程序员修炼之路基础篇四:继承相关推荐

  1. java程序试岗内容_使用纯 Java 程序为 SQL Server 数据库加载 JDBC 驱动程序,使用()语句...

    [单选题]如果在导游讲解进程中发生意外情况,景区(点)讲解员应及时联络( ),以期尽快得到妥善处理或解决. [多选题]与图文声像导游方式相比,实地口语导游方式将始终处于主导地位的原因有( ). [单选 ...

  2. Java修炼之路——基础篇——Java关键字

    1:transient 当对象被序列化时,transient阻止其修饰的对象进行序列化:当反序列化时,此对象的值不会被恢复. 2:instanceof 判断引用指向的对象,是不是某个类及其子类的实例对 ...

  3. Java修炼之路——基础篇——Java集合类详解2

    Set和List区别?Set如何保证元素不重复? Set.List都实现了Collection接口,List是有序的列表,Set是无序的集合(TreeSet有序) List实现类: ArrayList ...

  4. Java修炼之路——基础篇——平台无关性

    Java如何实现平台无关性? 首先说无论是哪种语言,都需要经过操作系统和CPU来完成程序的运行.平台无关性指的是程序不会因为操作系统和处理器的不同而不能运行或者发生运行错误.而不同的CPU和OS组成的 ...

  5. Java修炼之路——基础篇——枚举

    枚举的用法 每个枚举变量其实都是枚举类的一个实例. 枚举与单例 各种模式的单例模式,包括枚举实现的单例 //懒汉模式 class SingletonA {private static Singleto ...

  6. Java修炼之路——基础篇——值传递

    什么是值传递?引用传递? 值传递:值传递是将变量的一个副本传递到方法中,方法中如何操作该副本,都不会影响原变量的值.引用传递:引用传递是将变量的地址传递到方法中,方法中操作该变量,会对其产生影响. 为 ...

  7. Java修炼之路——基础篇——Java集合类详解1

    SynchronizedList和Vector的区别 java.util.Vector java.util.Collections.$SynchronizedList Vector用同步方法,Sync ...

  8. Java修炼之路——基础篇——String

    String 1:字符串的不可变性 什么是不可变对象?不可变对象是指创建后无法变更的对象 String为什么是不可变的?String类为final,并且内部字符数组也为final.所以String对象 ...

  9. Java修炼之路——基础篇——数据类型

    基础数据类型: 整型(byte short int long ).浮点型.布尔型.字符型boolean:只表示一位的信息,true,false.默认为false,基本上占一字节char: 16位,2字 ...

最新文章

  1. 入行AI,你需要一本Python机器学习入门
  2. PDB命令行调试Python代码
  3. 【数据结构与算法】之深入解析“回文数”的求解思路和算法示例
  4. 《『若水新闻』客户端开发教程》——14.代码编写(6)
  5. java 判断是否是昨天_java判断日期是否是今天
  6. SQLite语句总结
  7. VSCode Debug API
  8. CTR 预估模型简介--深度学习篇
  9. java 中使用_java中运算符的使用方法
  10. Itextpdf5 基础知识
  11. 【运维必备-堡垒机】
  12. 线性代数高频考题:判断含参数的线性方程组解的形式
  13. 代理ip按功能分哪几类?
  14. 【花雕动手做】有趣好玩的音乐可视化系列小项目(22)--LED无限魔方
  15. NodeJs+mongoose实现搜索功能
  16. 基于cc2530超声波测距报警系统
  17. mybatis plus 看这篇就够了,一发入魂
  18. (比较器)Comparator比较器
  19. weblogic服务器日志记录说明
  20. 如何在网页版163邮箱中添加别的邮箱

热门文章

  1. cookies池和proxy池
  2. 首席数据官成为企业转型中的重要角色之一
  3. WebSocket 原理
  4. Servlet 第六课: Session的使用
  5. 深入研究asp.net2.0——控件类库
  6. Solaris 10 x86 上折腾Mono
  7. JSP实现酒店预定系统
  8. VS2017中C++无法将参数1从const char [8] 转换为char[]
  9. Python爬虫入门:爬取某个网页的小说内容
  10. Windows性能计数器监控实践