iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解java 多态与抽象类
  • 349
分享到

如何理解java 多态与抽象类

2023-06-25 13:06:45 349人浏览 安东尼
摘要

今天就跟大家聊聊有关如何理解java 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK

今天就跟大家聊聊有关如何理解java 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

前言

今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK,可以说EDG面对如此强大的对手,想赢是比较难的,为了给中国队打气我立下flag,如果EDG获胜那我就奖励自己学习到第二天6点,结果我就来了,,,恭喜EDG!

如何理解java 多态与抽象类

为了接下来接口的学习,我们先来学习多态与抽类相关的一些知识,有助于我们更好的学习接口这一重点

多态

初识多态

多态(Polymorphism)按字面的意思就是“多种状态”,是面向对象的程序设计语言最核心的特征。从一定角度来看,封装和继承几乎都是为多态而准备的。

什么是多态?

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,举个例子

彩色打印机和黑白打印机都是打印机,但是你用彩色打印机就可以打印出彩色的文件,用黑白打印机就可以打印出黑白的文件,使用不同的实例来执行不同的操作。

多态的分类

编译时多态(设计时多态):方法的重载
运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。这个也是我们平时所说的多态

一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法
调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定

多态的必要条件

继承
父类引用指向子类对象:Parent p = new Child();
重写

先来解释一下第三个:
方法的重写和重载是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

实现多态

想要实现多态,那我们就先得了解向上转型与向下转型

向上转型

向上类型转换(Upcast):将子类型转换为父类型。 隐式/自动类型转换,是小类型到大类型的转换
对于向上的类型转换,不需要显示指定,即不需要加上前面的小括号和父 类类型名

例如:

Parent p = new Child();

就是非常典型的一种,前提是Parent是Child的父类,也就是父类引用指向子类实例化。这是自动进行的,是隐式的进行的。

向下转型

向下类型转换(Downcast):将父类型转换为子类型。 将一个指向子类对象的父类引用赋值给一个子类的引用
强制类型转换,是大类型到小类型 –
父类型的引用必须指向转型的子类的对象,即指向谁才能转换成谁。不然也会编译出错

例如:

Parent p = new Child(); Child c = (Child)p;

大家应该也注意到了,发生向下转型前发生了向下转型,这也是向下转型发生的前提,也就是将一个指向子类对象的父类引用赋值给一个子类的引用。

既然这样那么问题来了,我们怎么知道这个父类的引用是否指向了这个子类类型的对象呢?父类的子类一多,岂不是非常容易出错呢?

这个大家其实不需要太担心,因为我们有一个运算符instanceof

instanceof运算符

instanceof运算符用于:判断该运算符前面引用类型变量指向的对象是否是后面类,或者其子类、接口实现类创建的对象。如果是则返回true,否则返回false,

其使用格式如下: 引用类型变量 instanceof (类、抽象类或接口)

例如:

p instanceof Child;//true

instanceof运算符用于强制类型转换之前检查对象的真实类型以避免类型转换异常,从而提高代码健壮性。

具体实现

父类引用指向子类实例时,可以调用子类重写父类的方法以及直接继承父类的方法,无法调用子类特有的方法。
如果要调用子类的特有方法就得进行向下转型变成子类引用才可以。
静态static方法属于特殊情况,静态方法只能继承,不能重写。调用的时候用谁的引用,则调用谁的版本。

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

接下来来个简单的例子演示一下吧!

class Father {    int age=35;    public void high(){        System.out.println("爸爸身高175cm");    }    public void hobby(){        System.out.println("爸爸喜欢看新闻");    }    public static void sta(){        System.out.println("我是父类的静态方法");    }}class Son extends Father {    public void high() {        System.out.println("儿子今年身高180cm");    }    public void hobby() {        System.out.println("儿子喜欢打英雄联盟");    }    public static void sta(){        System.out.println("我是子类的静态方法");    }    public void self(){        System.out.println("我是儿子的方法");    }}public class Text_3 {    public static void main(String[] args){        Father f = new Son();        f.hobby();        f.high();        f.sta();//      f.self();//报错        Son s = (Son) f;        s.hobby();        s.self();        s.sta();    }}

输出为:

儿子喜欢打英雄联盟
儿子今年身高180cm
我是父类的静态方法
儿子喜欢打英雄联盟
我是儿子的方法
我是子类的静态方法

大家注意子类和父类中都有sta()方法,这并不是重写,它们都是自己类的方法,并无什么关系。

抽象类与抽象方法

为什么要使用抽象?

当父类的某些方法不确定时,可以用abstract关键字来修饰该方法,即:抽象方法,用abstract来修饰该类,即:抽象类。

我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。

用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

抽象方法

抽象方法不能有方法主体。格式如下:

//动物会叫public abstract void cry();

抽象类

抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类。其实抽象类就是为了继承而出现的

abstract定义抽象类 ,抽象类可以没有抽象方法
抽象类不能直接实例化,只能被继承,可以通过向上转型完成对象实例
abstract定义抽象方法,不需要具体实现
包含抽象方法的类是抽象类
当继承的父类是抽象类时,需要将抽象类中的所有抽象方法全部实现。如果没有全部实现那么这个子类必须定义为抽象类,否则报错。
abstract 不能与static、final、private共存
抽象方法在子类实现时访问权限必须大于等于父类方法

格式如下:

abstract class Animal {    String name;    int age;    // 抽象方法    public abstract void cry(); }

希望大家能够像EDG一样证明自己,让那些看不好你的人,好好瞧瞧
加油,少年!

看完上述内容,你们对如何理解java 多态与抽象类有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 如何理解java 多态与抽象类

本文链接: https://www.lsjlt.com/news/305080.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解java 多态与抽象类
    今天就跟大家聊聊有关如何理解java 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK...
    99+
    2023-06-25
  • java 多态与抽象类详解总结
    目录前言多态初识多态什么是多态?多态的分类多态的必要条件实现多态向上转型向下转型instanceof运算符具体实现抽象类与抽象方法为什么要使用抽象?抽象方法抽象类前言 今天是2021...
    99+
    2022-11-12
  • Java多态性抽象类与接口细致详解
    目录1、多态性1.1向上转型1.2向下转型2、抽象类2.1抽象类的基本概念3、接口3.1接口的基本概念3.2接口的使用限制3.3使用接口定义标准3.4抽象类与接口的区别1、多态性 多...
    99+
    2022-11-12
  • Java多态与抽象类的使用与原理是什么
    这篇文章主要介绍“Java多态与抽象类的使用与原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java多态与抽象类的使用与原理是什么”文章能帮助大家解决问题。我们知道Java的三大特性:封装...
    99+
    2023-06-29
  • Java中的多态、抽象类和接口详解
    目录1.多态1.1 向上转型1.2 向下转型1.3 实现多态的条件1.4多态的特点与使用1.5多态的应用以父类类型作为方法的参数使用父类型作为方法的返回值1.6 多态的注意点2.抽象...
    99+
    2022-11-13
  • 一文详解Java抽象类到底有多抽象
    目录抽象类1.引出抽象类2.认识抽象类接口1.抽象类和接口的区别2.认识接口3.具体实现USB接口接口表示能力抽象类 1.引出抽象类 向上转型带来的最大的好处就是参数统一化,使用共同...
    99+
    2022-11-13
  • 如何理解Java抽象类和接口
    这期内容当中小编将会给大家带来有关如何理解Java抽象类和接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在面试中我们经常被问到:Java中抽象类和接口的区别是什么然后,我们就大说一通抽象类可以有方法,...
    99+
    2023-06-17
  • Java语法之 Java 的多态、抽象类和接口
    目录一、多态1.向上转型2.动态绑定3.方法重写4.向下转型5.关键字super6.在构造方法中调用重写方法(坑)7.理解多态8.小结二、抽象类1.概念2.注意事项3.抽象类的意义3...
    99+
    2022-11-12
  • Java中多态和抽象类的实现方式
    这篇文章主要讲解了“Java中多态和抽象类的实现方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中多态和抽象类的实现方式”吧!  多态  1.要实现多态,那么必须存在父子关系(继承...
    99+
    2023-06-02
  • C++多态的实现与原理及抽象类实例分析
    这篇文章主要讲解了“C++多态的实现与原理及抽象类实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多态的实现与原理及抽象类实例分析”吧!多态的概念多态: 从字面意思来看,就是事物...
    99+
    2023-06-29
  • 详解Java抽象类与普通类的区别
    浅谈抽象类 在面向对象概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的.如果一个类中没有足够多的信息来描述一个具体的对象,这样的类就是抽象类。 ...
    99+
    2022-11-12
  • C++抽象基类如何理解
    本篇文章为大家展示了C++抽象基类如何理解,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面来聊聊抽象基类(abstract base class简称ABC)。我们之前说过,在我们实现继承的时候,需...
    99+
    2023-06-26
  • Java超详细讲解抽象类的原理与用法
    目录1. 抽象类是什么2 抽象类的语法3 抽象类都有什么特性4 抽象类是干什么的1. 抽象类是什么 ️给大家上一篇小作文,看完这个,你就理解了什么叫做抽象类 在面向对象的概念中,所有...
    99+
    2022-11-13
  • 详细理解JAVA面向对象的封装,继承,多态,抽象
    目录类和对象的使用(面向对象思想落地的实现):子类对象实例化的全过程1.从结果上看:(继承性)2.从过程上来看:1.封装性2.继承性继承性的好处:3.多态性虚拟方法调用4.抽象性1....
    99+
    2022-11-12
  • C++数据结构分析多态的实现与原理及抽象类
    目录多态的概念虚函数多态构成的条件C++11override和final重载、重写和重定义(隐藏)抽象类多态的原理虚函数表原理单继承和多继承的虚表单继承的虚表多继承的虚函数表几个值得...
    99+
    2022-11-13
  • Java 抽象类与模板设计模式详解
    抽象类抽象类是为了方法覆写而提供的类结构,因为其无法自身直接进行对象实例化操作,所以在实际应用中,抽象类主要目的是进行过程操作使用,当你要使用抽象类进行开发的时候,往往都是在你设计中需要解决类继承问题时所带来的的代码重复处理。普通类是一个完...
    99+
    2023-06-03
  • Java基础巩固抽象类与接口详解
    目录1、抽象类1.1、什么是抽象类1.2、抽象类的用法1.3、抽象类特点(限制条件)2、接口2.1、什么是接口2.2、接口的用法2.3、如何使用接口2.4、接口的特点(限制条件)2....
    99+
    2022-11-13
  • java:抽象类与模板方法模式详解
    目录一、抽象类概念二、抽象方法的特点三、抽象类的特点四、创建抽象类与抽象方法抽象类: 抽象方法: 五、抽象类与抽象方法的使用六、模板方法模式1. 定义2. 意图3. 模式结构4. 示...
    99+
    2022-11-12
  • 详解Java语言中的抽象类与继承
    目录一、实验目的二、实验要求三、实验报告要求四、实验小结一、实验目的 1、掌握抽象类的设计; 2、掌握抽象方法方法的实现; 3、熟悉类的向下向上转型,以及子类实例化父类对象的基本要求...
    99+
    2022-11-13
    Java抽象类 继承 Java抽象类 Java 继承
  • java中抽象类、抽象方法、接口与实现接口实例详解
    前言对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦...
    99+
    2023-05-30
    java 抽象类 接口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作