此处我会分为这几个部分来理解继承是怎么样的:

1、区分封装、继承和多态

2、区分限定词的范围

3、区分隐藏、覆盖、重载

4、继承的理解

5、一道面试题的原型

---------------------------------------这里是友好的分隔线----------------------------------------

一般我们都会说Java的三大特性有:封装、继承、多态。现在先来捋顺一下它们的概念加以区分。

封装

封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问。

可以这么理解:

1、封装可以把一个对象的属性私有化,同时可以选择性地提供可以被外界访问的方法(getter、setter)。

2、封装可以使我们更容易地对一个对象的内部进行操作。

3、封装可以让我们对成员变量进行更为精准的控制,像是对成员变量使用限定符,还有判断属性值的合法性。

继承

继承是类与类的一种关系,是使用已存在的类的顶底作为基础建立新类的技术。新类的定义可以增加新的数据或新的功能,也可以使用父类的功能,不能选择性地继承父类,但是父类可以选择性地让子类继承一些属性。

可以这么理解:

1、父类拥有的“财产”可以让子类来继承,但是父类有权利选择给子类继承多少“财产”,而子类没有权利选择性地继承父类给的“财产”。

2、子类也可以通过自己的双手去创造自己的“财富”,可以对父类的“财产”进行扩展。

3、子类可以通过“覆盖”、“隐藏”来实现自身的特殊的价值(后文会重点提到)。

另外,对于继承来说有三个关键字不得不提:构造器、protected、向上转型,后文会提及。

多态

多态指的是对象的多种形态。多态有两种:引用多态和方法多态。继承是多态的实现基础。

1、引用多态

父类的引用可以指向本类的对象;父类的引用可以指向子类的对象。

public class Test{public static void main(String[] args){    //父类的引用可以指向本类的对象Animal ani1 = new Animal();    //父类的引用可以指向子类的对象Animal ani2 = new Dog();}
}

2、方法多态

创建父类对象时,调用的方法为父类方法;

创建子类对象时,调用的方法是子类重写的方法或继承自父类的方法;

参考:

https://www.cnblogs.com/BoscoGuo/p/5877185.html

---------------------------------这里是友好的分隔线-----------------------------------

我们所说的限定词有四种,public、protected、默认、private。

这里就简单说一下他们的区别。

范围

public

protected

默认

private

同类

同包子类

非同包子类

非同包非子类

(注意:这里重点区分一下protected和默认的区别)

参考:http://blog.51cto.com/ironkui/1755385

-------------------------------------------这里是友好的分隔线-----------------------------------------

接下来我们来了解一下隐藏、覆盖和重载的区别

重载

重载是方法名相同,但是参数不同的多个同名函数

  注意:参数不同的意思是指参数类型、参数个数和参数顺序之中至少有一个不同,但是返回值和异常已经访问修饰符不能算作是重载的条件,另外main方法也还是可以重载的。

覆盖

覆盖是子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者是相同(即为父类的子类),限定符范围比父类的大或者相同。

  注意:子类实例方法不能覆盖父类的静态方法;子类的静态方法也不能覆盖父类的实例方法。

隐藏

隐藏是指当父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际上还是存在的。

  注意:父类的实例变量和静态变量能被子类的同名变量隐藏;父类的静态方法被子类的同名静态方法隐藏;父类的实例方法被子类的同名实例变量覆盖

  也就是说,不能用子类的静态方法覆盖父类中同样签名(参数签名完全一样)的实例方法;不能用子类的实例方法覆盖父类中同样表示的静态方法;变量只能被隐藏而不会被覆盖。

隐藏和覆盖的区别:

  被隐藏的属性,在子类被强制转换成父类之后,访问的是父类中的属性。

  被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法。

 

参考:

https://www.cnblogs.com/it12345/p/5221673.html

https://www.cnblogs.com/xiaoQLu/archive/2013/01/07/2849869.html

---------------------------------这里是友好的分隔线-----------------------------------

继承

在java中使用extends关键字来表示继承关系。当创建一个类时,总是在继承,如果没有明确指出要继承的类,就总是隐式地继承根类Object。

如果两个类存在继承关系,那么子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中只允许单继承,但是一个类却可以被多个类继承,也就说是,一个男人可以有多个儿子但是他的儿子只能认他为亲爹。

1、子类继承父类的成员变量也不是全部的变量都可以继承到的。

  ① 父类用private修饰的成员变量不能继承。

  ② 对于父类的包访问权限成员变量,要跟父类在同一个包下子类才能继承它。

  ③ 如果子类和父类中都出现了同名称的成员变量,则会发生隐藏现象,子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类的同名成员变量,需要使用super关键字进行引用。

2、子类继承父类的方法同样也是有条件的。

  ① 父类用private修饰的成员方法不能继承。

  ② 对于父类的包访问权限成员方法,要跟父类在同一个包下子类才能继承它。

  ③ 如果子类和父类中都出现了同名称的成员方法,则会发生覆盖现象,子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类的同名成员方法,需要使用super关键字进行引用。

(注意:隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的)

3、构造器:子类是不能够继承父类的构造器

  ① 如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地使用super来调用父类的构造器。

  ② 如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,因为系统会自动调用父类的无参构造器。

参考:

https://www.cnblogs.com/dolphin0520/p/3803432.html

-------------------------------这里是友好的分隔线-----------------------------------

接下来是一道面试题的原型,看看你能不能做对?

public class Test03 {public static void main(String[] args) {Son son = new Son();}
}
class Parent{static{System.out.println("Static Parent.");}public Parent(){System.out.println("Parent Block");}
}
class Son extends Parent{static{System.out.println("Static Son.");}public Son(){System.out.println("Son Block.");}
}

答案:

转载于:https://www.cnblogs.com/NYfor2018/p/9491168.html

Java的三大特性之继承相关推荐

  1. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  2. java三大特性 继承_java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  3. java 集成_java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

  4. java 面向对象三大特性之继承 万字详解(超详细)

    目录 前言 : 一.为什么需要继承: 二.什么是继承(Warning : 篇幅较长)? 1.继承概述: 2.子类继承父类之后达到的效果 : ①如何使用继承? ②代码演示 : 3.继承的使用场景: eg ...

  5. java如何理解继承性_理解 Java 的三大特性之继承

    •通过代码深入了解继承 在讲解之前我们先看一个例子,该例子是前篇博文的. Husband.java: public classHusband {/** 对属性的封装 * 一个人的姓名.性别.年龄.妻子 ...

  6. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  7. Java面向对象三大特性(封装继承多态)解释及案例

    文章目录 包 包基本语法 命名规则 命名规范 导入包实例 访问修饰符 面向对象编程-封装 面向对象编程-继承 super关键词 super和this的比较 方法重写/覆盖 (override) 注意事 ...

  8. Java面向对象三大特性之继承多态的预习笔记,are you ready? 面对疾风吧!

    文章目录 继承(extends) super关键字 方法重写 instanceof关键字 abstract关键字 接口(interface) 多态 继承(extends) AextendsB A继承了 ...

  9. java提高篇(三)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

最新文章

  1. 关于页面无法实现高度100%的原因及实现方法。
  2. 【BZOJ2226】LCM SUM,数论之一维LCM(莫比乌斯反演)
  3. C++14::lambda函数的类型
  4. 案例7-2 寻找大富翁 (25 分)(STL容器)
  5. python + eclipse +pydev
  6. 中文近义词工具包,Synonyms 发布新版本 v3.16,支持词汇表扩大至 40w+
  7. 微信企业号开发接口文档
  8. 传智播客reactnative_传智播客黑马前端36期(2018年)
  9. 属性值第二个字符是大写引发的血案Warning:(X,X) java: Unmapped target property: “vCpu“.
  10. 在BuildConfig中添加自定义字段
  11. ECCV2018 papers
  12. 利用网络爬虫爬取知乎回答者的信息及回答内容
  13. ubuntu 软件管理
  14. VB.NET中IIF和IF使用效率分析
  15. Java限流解决方案
  16. 关于数据挖掘中“多重共线性”的确定方法(有图有真相)
  17. Multisim 14.0安装教程---图文讲解
  18. 山西财经大学计算机二级成绩,山西财经大学2018年各省市各批次录取分数线
  19. 【PCB专题】光绘(Gerber)文件的理解
  20. 【职业规划】了解自己~

热门文章

  1. SqlServer英文单词全字匹配
  2. Gson.toJson()时内存溢出StackOverflowError
  3. [论文泛读] QoS论文两篇(Elsevier09, IEEE05)
  4. 计算机图形学----基于3D图形开发技术 (韩正贤 著)
  5. MultipartResolver实现文件上传功能
  6. NETSTAT日常应用归档
  7. 工作笔记--关于服务出问题时如何处理的流程
  8. 《火星人开发纪实:敏捷开发一千零一夜》序言
  9. centos 调整系统时间
  10. 在Linux下进行Apache+tomcat整合