一、什么是继承

面向对象的三大特性: 封装、 继承、多态;

继承就是子类型将父类型的的属性继承到自己类中进行使用,通过继承的方式子类型可以使用父类型的属性和方法,并且,继承只能单重继承,无法多继承,但可以间接继承;

的概念和作用

继承其实不只是单单只有这些作用,其实它是一种前置条件,只有有了继承,才有后面的方法覆盖与多态;

继承的注意事项: 子类无法继承父类的私有属性;

父类型构造方法无法被继承;

二、什么是方法覆盖

所谓的方法覆盖 就是当父类型中的方法无法满足子类型的时候,通过不修改父类型方法,只在子类型中进行重写继承过来的方法,以达到满足程序要求;

1 public classTest24 {2 public static voidmain(String[] args) {3

4 Dog d = newDog();5 d.move();6 //output result: 狗在跑步7 //d.move() 的运行步骤是 d 引用调用 Dog 中的重写过后的方法

8 }9 }10

11 class Dog extendsDongWu{12

13 public voidmove(){14 System.out.println("狗在跑步");15 }16 //当对父类型的方法进行重写时,其子类型中的重写方法,其 返回值类型,方法名,形参要全部一致相同,如果有不同的地方,将不构成方法的重载

17

18 }19

20 classDongWu{21

22 private voidmove(){23 System.out.println("DongWu 在移动!");24 }25 }

View Code

方法覆盖的注意事项: 1、进行覆盖的方法其修饰符级别不能低于父类型的修饰符级别;

2、构造方法无法被覆盖

3、静态方法不存在覆盖

4、覆盖只针对方法,不针对属性

5、抛出异常只能比父类型少,不能比父类型多

三、什么是多态

多态是一种通过继承的方式来达到程序解耦合的结构方式;

在基本数据类型中,有学到过数据类型转换功能,其实在类与类之间也有类型转换,当然只有两个类或多个类有继承关系的情况下,才有类型转换,转换形式有两种:

—— 子类指向父类: 自动类型转换,且称为向上转型;

—— 父类指向子类: 强制类型转换,且称为向下转型;

1 public classTest23 {2

3 public static voidmain(String[] args) {4

5 Animal a = new Tiger(); //多态6 //子类型指向父类型 ,自动类型转换,向上转型

7 a.move();8

9 //Tiger i = (Tiger) a; 语法编译都正常,但是会出现运行异常:父类型有可能指向错误,解决方案

10

11 if(a instanceofTiger) {12 Tiger i = (Tiger) a; //多态13 //父类型指向子类型,强制类型转换,向下转型

14 i.move();15 }16 }17 }18

19 classAnimal{20

21 public voidmove() {22

23 }24 }25

26 class Tiger extendsAnimal{27

28 public voidmove() {29 System.out.println("老虎在散步");30 }31 }32

33 class Lion extendsAnimal{34

35 public voidmove() {36 System.out.println("老虎在跑步");37 }38 }

View Code

在该程序中出现了一个新的关键字 instanceof  -----------------> 它的作用是测试它左边的对象是否指向它右边的类的实例,返回boolean类型的数据;这样做的好处是判断两个类的指向,避免运行异常;

四、为什么使用多态,多态的作用是什么

前面提到多态有解耦合的功能,将它运用在程序当中,可以是程序的耦合度更松散,使程序的可扩展性更强;

1 public classTest22 {2

3 public static voidmain(String[] args) {4

5 Host zhangsan = newHost();6

7 Dog erHa = newDog();8

9 zhangsan.feed(erHa);10 }11

12 }13

14 classHost{15

16 public voidfeed(Pet pet) {17 pet.eat();18 }19 }20

21 classPet{22

23 public voideat() {24

25 }26 }27

28 class Dog extendsPet{29

30 //方法的继承与覆盖31 //方法覆盖: 修饰符不大于,返回值不变,方法名不变,形参不变

32 public voideat() {33 System.out.println("狗吃骨头");34 }35 }36

37 class Cat extendsPet{38

39 //方法的继承与覆盖

40 public voideat() {41 System.out.println("猫吃鱼");42 }43 }

多态的功能性

多态的作用就是减少类与类之间的相关联,在类与类的继承过程中,提供一个抽象类,并将子类将抽象类作为父类 ,使它成为一个与原父类的接口, 达到剥离原父类的目的;在原父类在调用子类时,可以通过接口进行去调用,并可以达到子类与原父类不相关的目的,提高扩展性。

java多态 覆盖_Java ------ 继承、方法覆盖、多态相关推荐

  1. java 判断object类型_Java学习-方法与多态的学习心得

    一 1.什么是方法重写 方法的重写或方法的覆盖(overriding) 子类根据需求对从父类继承的方法进行重新编写 重写时,可以用super.方法的方式来保留父类的方法 构造方法不能被重写 2.方法重 ...

  2. java 成员函数_Java继承中成员变量和成员函数的覆盖

    关于继承中变量和方法的覆盖: 1, 与基类中同名的变量,会被派生类所覆盖(同时存在但是有独立的值),直接取值将是派生类的值,但是基类的变量也是同时存在的.如果通过派生类函数访问,得到派生类的值.如果通 ...

  3. Java刷题知识点之方法覆盖(方法重写)和方法重载的区别

    https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=6 方法重写的原则: 重写 ...

  4. java隐藏与覆盖_Java 隐藏和覆盖

    我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊 ...

  5. java finalize逃脱_java finalize方法详解

    1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize()与C++中的析构函数 ...

  6. java隐藏与覆盖_java中方法的隐藏和覆盖问题?

    ok()方法在继承时候发生覆盖(重写)了吗? 发生了.在子类B中的ok()方法拥有父类方法相同的方法名和参数列表(signature),所以在这里发生了重写.调用B类对象的ok()方法会print & ...

  7. java 静态方法覆盖_Java中方法的覆盖和静态方法的隐藏

    下面的程序对巴辛吉小鬣狗和其它狗之间的行为差异进行了建模.如果你不知道 什么是巴辛吉小鬣狗,那么我告诉你,这是一种产自非洲的小型卷尾狗,它们从 来都不叫唤.那么,这个程序将打印出什么呢? class ...

  8. java基础小记_Java基础学习小记--多态

    题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓"早起毁一天"不是没有道理哪,特别对Coders来说,有几天不是加班到夜里.好吧,我承认对于初学Java的我, ...

  9. java 重载与覆盖_Java重载与覆盖

    小编典典 您基本上是正确的.重载在单个类中具有多个方法,其中方法具有相同的名称.但是,返回值不被视为方法 签名 的一部分.因此,不能通过仅更改返回值来重载方法.您的示例中不能包含以下代码: publi ...

最新文章

  1. markdown简明语法
  2. mysql mybatis 主键id_MyBatis+MySQL 返回插入的主键ID-Go语言中文社区
  3. B站爱情怀,投资者只看利益
  4. fuzzy k means
  5. java学绘图吗_Java绘图
  6. iframe高度自适应(IE6+、FF、Opera、Chrome等测试通过)
  7. mysql 10个日期,MySQL自学篇(10)——日期函数
  8. 优化Android应用内存的若干方法
  9. Java Lambda表达式的使用
  10. php-rpm.conf,在新安装的宝塔面板中php无法启动起来
  11. Python PyPI中国镜像
  12. HibernateAnnotation入门实例
  13. 开课吧Java课堂:线程间是如何实现通信
  14. 怎么利用计算机公式计算完成比例,excel表格数据计算所占比例公式的使用教程...
  15. Javascript中的Trait与代码重用
  16. Mysql 语法执行顺序
  17. 自制汉字字库,识别汉字(三)(汉字篇)
  18. Windows11在Edge浏览器中打开IE浏览器兼容的页面,在Edge浏览器打开加载ActiveX控件的页面
  19. 屏蔽csdn百度推广广告
  20. SQL 字母大小写转换函数UPPER()、UCASE()、LOWER()和LCASE()

热门文章

  1. 十句保你职场不败的名言
  2. 人生最重要的十个健康伴侣
  3. .net控件FreeTextBox使用方法
  4. 最著名的10位程序员,你都知道吗?
  5. 谷歌放弃C++语言,Python将要一统江湖了?
  6. 从每年的编程语言排行来看,为什么C/C++能稳居前五?
  7. 性能优化(6):为什么一定要将css置顶?
  8. html中添加背景音乐的标签,添加背景音乐的html标签是什么
  9. mysql存储过程执行update_MySQL存储过程实现动态执行SQL
  10. mysql 一对多 join_Mysql中FIND_IN_SET与JOIN在一对多关系查询时的优劣