iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java多态与抽象类的使用与原理是什么
  • 312
分享到

Java多态与抽象类的使用与原理是什么

2023-06-29 11:06:28 312人浏览 八月长安
摘要

这篇文章主要介绍“Java多态与抽象类的使用与原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java多态与抽象类的使用与原理是什么”文章能帮助大家解决问题。我们知道Java的三大特性:封装

这篇文章主要介绍“Java多态与抽象类的使用与原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java多态与抽象类的使用与原理是什么”文章能帮助大家解决问题。

我们知道Java的三大特性:封装、继承、多态。前两个之前在Java入门(六)已经讲到,现在来讲多态这个特性。

什么是多态?

多态顾名思义即为多种形态的意思

Java中多态的含义:

  • 发送消息给某个对象,让这个对象自行决定采用哪种行为响应这个消息

  • 子类对象的引用赋值给父类引用变量来实现动态的方法调用

Java中形成多态的前提:

  • 继承

  • 父类方法的重写

  • 向上转型

我对多态的解释:

比如我们,是人,也是学生,也是年轻人,我可以用人的身份去做事情,也可以用学生的身份去买学生票,也可以用年轻人的身份做公益,这样我们可以通过不同的形态去做不同的事情。这样是不是更好理解一点?

注意:

多态前提条件:必须有子父类关系。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

多态的定义与使用格式:

父类类型 变量名=new 子类类型();

多态中成员的特点:

  • 多态成员变量:编译运行看左边

  • 多态成员方法:编译看左边,运行看右边

多态的转型:

  • 多态的转型分为向上转型和向下转型两种

  • 向上转型:多态本身就是向上转型过的过程

  • 使用格式:父类类型 变量名=new 子类类型();

  • 适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

  • 向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型

  • 使用格式:子类类型 变量名=(子类类型) 父类类型的变量;

  • 适用场景:当要使用子类特有功能时。

代码解释:

public class Person {     //人类,作为父类使用    public void speak(){        System.out.println("我们都是一个人");    }}public class Student extends Person{    //继承父类,相当于我们是学生,有人的方法    @Override    public void speak(){        System.out.println("我是人类中的学生");    }}public class Child extends Person{   //继承父类,相当于我们是孩子,有孩子的行为    @Override    public void speak(){        System.out.println("我是人类中的孩子");    }}//测试类public class TestMain {    public static void main(String[] args) {//父类类型 变量名=new 子类类型();        Person p = new Student();   //子类对象的引用赋值给父类         p.speak(); //多态 相当于这里使用的是Student的方法。输出我是人类中的学生        //我作为人,我用学生的身份,说出:我是人类中的学生Person p = new Child(); p.speak();  //输出:我是人类中的孩子//我作为人,用孩子的身份,说出我是人类中的孩子    }}//这段代码,我们用到了 继承,重写,向上转型,因为多态本来就是向上转型的过程

多态的作用:

介绍完多态,讲讲多态有什么用呢?为什么多态可以作为Java的三大特性。肯定是有原因的:

  • 提高代码的可重用性

  • 降低模块之间的耦合度

这里给大家介绍一下什么是多态机制?Java语言是如何实现多态的?(可能有点难以理解,本人对于该内容也没用理解充分,但这也是面试会考的题)

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并 不确定,而是在程序运行期间才确定,即一个引用变量倒 底会指向哪个类的实例对象,该引用变量发出 的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具 体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而 导致该引用 调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让程序可以选 择多个运行状态,这就是多态性。 多态分为编译时多态和运行时多态。其中编辑时多态是静态的,主要 是指方法的 重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不 同的函数, 在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来 实现的,也就是我们所说的多态性。

对于多态的理解,还可以参考一段代码:

class People{     //父类    public void eat(){        System.out.println("我们会吃饭");    }}class Student extends People{  //继承父类    @Override    public void eat(){        System.out.println("我会吃肉");    }    public void study(){        System.out.println("我们要好好学习");    }}class Teacher extends People{     //继承父类    @Override    public void eat(){        System.out.println("老师会吃蔬菜");    }    public void teach(){        System.out.println("老师要认真上课");    }}//测试类:public class TestMain {    public static void main(String[] args) {        People p=new Stu();      //子类对象的引用赋值给父类         p.eat();       //输出: 我会吃肉    }}

抽象类:

什么是抽象类?

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

抽象方法:

在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。也就是说,抽象类里面的抽象方法,可以不写,在被继承后,再重写。

抽象类声明关键字:abstracat

定义一个抽象类:

public abstract class studnet{//定义一个抽象类public void study(){                         //普通方法System.out.println("我会学习");}public abstract void eat();         //抽象方法,没有方法体,有abstract关键字做修饰}//注意: 有抽象方法,这个类必须是抽象的!!!

举例解释:

形状类Shape需要提供用于计算面积和周长的方法,但是形状本身没有被确定,那么计算周长和面积的方法就无法确定,此时我们就需要使用抽象类和抽象方法。

由于Shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中进行实现。

//定义一个shape类,但是没有具体的形状,所以我们定义成抽象类public abstract class Shape {        private int a;    public abstract void area(){}     //求面积的方法    public abstract void perimeter();   //求周长的方法    public Shape() {    //无参构造    }    public Shape(int a) {        this.a = a;    }}
//计算圆形面积的子类public  abstract class shape {    //有抽象方法的类,则一定是抽象类,需要关键字abstract修饰        private int a;        public abstract void area();     //求面积的方法,没有方法体的方法,需要关键字abstract修饰        public abstract void perimeter();   //求周长的方法}//创建计算圆面积和周长的子类,并继承抽象类shape,并重写shape内的方法public class Circle extends shape{    public static double pi = 3.14;    private double r;  //半径    @Override    public void area() {        System.out.println("圆的面积:"+Circle.pi*this.r*this.r);    }    @Override    public void perimeter() {        System.out.println("圆的周长为:"+2*Circle.pi*this.r);    }    public Circle() {    }    public Circle(double r) {  //        this.r = r;    }}//测试类:public class TestMain {    public static void main(String[] args) {        Circle c = new Circle(5);        //传入半径为:5        c.area();        c.perimeter();    }}

//输出结果: 圆的面积:78.5
//圆的周长为:31.400000000000002

抽象方法和抽象类的注意事项:

  • 抽象类中是可以有构造函数的,并且构造函数的写法和其它类没有区别,只不过它真正跑起来是因为子类构造函数的super调用,毕竟我们没办法new一个抽象类对象出来,只能把抽象类的构造函数交给子类的构造函数去使用。

  • 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类。

  • 抽象类的子类,必须重写父类中所有的抽象方法,如果有一个抽象方法没有重写,都会出现编译错误不给过,这时也可以把子类也声明为抽象类,报错就会消失。

关于“Java多态与抽象类的使用与原理是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Java多态与抽象类的使用与原理是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Java多态与抽象类的使用与原理是什么
    这篇文章主要介绍“Java多态与抽象类的使用与原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java多态与抽象类的使用与原理是什么”文章能帮助大家解决问题。我们知道Java的三大特性:封装...
    99+
    2023-06-29
  • 如何理解java 多态与抽象类
    今天就跟大家聊聊有关如何理解java 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK...
    99+
    2023-06-25
  • C++多态的实现与原理及抽象类实例分析
    这篇文章主要讲解了“C++多态的实现与原理及抽象类实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多态的实现与原理及抽象类实例分析”吧!多态的概念多态: 从字面意思来看,就是事物...
    99+
    2023-06-29
  • 知道java抽象类与抽象方法是什么吗?
    java抽象类与抽象方法是什么?在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实例,这样的类叫做抽象类;一般当我们设计一个...
    99+
    2016-03-20
    java教程 java 抽象类 抽象方法
  • Java超详细讲解抽象类的原理与用法
    目录1. 抽象类是什么2 抽象类的语法3 抽象类都有什么特性4 抽象类是干什么的1. 抽象类是什么 ️给大家上一篇小作文,看完这个,你就理解了什么叫做抽象类 在面向对象的概念中,所有...
    99+
    2022-11-13
  • Java的态和抽象类是什么
    这篇文章主要为大家展示了“Java的态和抽象类是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java的态和抽象类是什么”这篇文章吧。多态:我们知道Java的三大特性:封装、继承、多态。前两...
    99+
    2023-06-29
  • C++数据结构分析多态的实现与原理及抽象类
    目录多态的概念虚函数多态构成的条件C++11override和final重载、重写和重定义(隐藏)抽象类多态的原理虚函数表原理单继承和多继承的虚表单继承的虚表多继承的虚函数表几个值得...
    99+
    2022-11-13
  • JAVA接口与抽象类怎么使用
    本篇内容介绍了“JAVA接口与抽象类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口概述当需要从几个类中派生出一个类,继承他们所有...
    99+
    2023-07-02
  • Java中接口与抽象类的区别是什么
    本篇文章为大家展示了Java中接口与抽象类的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体...
    99+
    2023-05-31
    java 别是 ava
  • Java面向对象之多态的原理是什么与怎么实现
    本文小编为大家详细介绍“Java面向对象之多态的原理是什么与怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java面向对象之多态的原理是什么与怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。何为多...
    99+
    2023-06-30
  • python中抽象类的原理是什么
    本篇文章为大家展示了python中抽象类的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代...
    99+
    2023-06-14
  • Java抽象类与接口怎么定义使用
    这篇文章主要介绍“Java抽象类与接口怎么定义使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java抽象类与接口怎么定义使用”文章能帮助大家解决问题。1.对象的比较两个对象要进行比较之前,我们首...
    99+
    2023-06-30
  • java中的接口与抽象类有什么区别
    java中的接口与抽象类有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java 中接口和抽象类的区别与对比接口和抽象类的概念不一样。 接口是对动作的抽象,抽象类是对根...
    99+
    2023-05-31
    java ava
  • java中抽象类与普通类、接口的区别分别是什么
    抽象类:一个类中有抽象方法,这个类就变成了抽象类。抽象类中class的前面必须有abstract修饰符。抽象类中可以有普通方法,也可以有抽象方法,而抽象方法的个数可以是0个,也可以是多个。子类继承父类,必须重写全部的抽象方法,除非这个类也变...
    99+
    2015-07-03
    java入门 java 抽象类 普通类 接口 区别
  • Java超详细介绍抽象类与接口的使用
    目录1.抽象类的语法和特性1.1语法1.2特性2.接口的语法和使用2.1语法2.2特性1.抽象类的语法和特性 1.1语法 1.在Java中,一个类如果被abstract 修饰称为抽象...
    99+
    2022-11-13
  • Java超详细讲解抽象类与接口的使用
    目录一、抽象类1、抽象类的语法2、抽象类的特性3、抽象类的作用二、接口1、接口的概念2、接口使用3、接口特性4、实现多个接口5、接口间的继承6、常用的接口(1)Comparable接...
    99+
    2022-11-13
  • 详解Java面向对象之多态的原理与实现
    目录何为多态代码实现多态理解何为多态 定义: 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。系统在运行时(而非编译时),...
    99+
    2022-11-13
  • Java接口的使用与原理是什么
    这篇“Java接口的使用与原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java接口的使用与原理是什么”文章吧。何...
    99+
    2023-06-29
  • java中多态的原理是什么
    今天就跟大家聊聊有关java中多态的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2...
    99+
    2023-06-14
  • java抽象类的作用和意义是什么
    抽象类在Java中具有以下作用和意义:1. 封装共同的属性和方法:抽象类可以包含属性和方法,用于封装共同的特征和行为。这样可以避免在...
    99+
    2023-10-08
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作