广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java 多态与抽象类详解总结
  • 528
分享到

java 多态与抽象类详解总结

2024-04-02 19:04:59 528人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言多态初识多态什么是多态?多态的分类多态的必要条件实现多态向上转型向下转型instanceof运算符具体实现抽象类与抽象方法为什么要使用抽象?抽象方法抽象类前言 今天是2021

前言

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

在这里插入图片描述

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

多态

初识多态

多态(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 多态与抽象类详解总结的文章就介绍到这了,更多相关java 多态与抽象类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java 多态与抽象类详解总结

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

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

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

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

下载Word文档
猜你喜欢
  • 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 多态与抽象类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言今天是2021LOL全球总决赛,一直不被大家看好的EDG冲到了决赛对战韩国队的DK...
    99+
    2023-06-25
  • Java 抽象类特点总结
    一、前言 前面我们学习了多态中的转型,那么现在我们开始学习抽象类的概述和使用 二、抽象类 生活大多事物是具有抽象含义的,比如我说一个生物,你想不到我说的生物是什么, 在比如说一个动物...
    99+
    2022-11-12
  • java继承多态和抽象类接口知识点总结
    本篇内容主要讲解“java继承多态和抽象类接口知识点总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java继承多态和抽象类接口知识点总结”吧!一、继承通过扩展一个已有的类,并继承该类的属性和...
    99+
    2023-06-03
  • 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抽象类详解
    抽象类 抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如: 说明 1.矩形,三角形,圆形都...
    99+
    2023-09-23
    java 开发语言
  • 详解Java抽象类与普通类的区别
    浅谈抽象类 在面向对象概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的.如果一个类中没有足够多的信息来描述一个具体的对象,这样的类就是抽象类。 ...
    99+
    2022-11-12
  • Java多态与抽象类的使用与原理是什么
    这篇文章主要介绍“Java多态与抽象类的使用与原理是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java多态与抽象类的使用与原理是什么”文章能帮助大家解决问题。我们知道Java的三大特性:封装...
    99+
    2023-06-29
  • Java 抽象类详细讲解
    目录 Java抽象类概念 Java抽象类示例 继承Animal类的子类的示例 Java抽象类详细使用方法 1、定义抽象类 2、继承抽象类 3、实现抽象方法 4、完整示例代码 Java抽象类概念 Java中抽象类是指用abstract关键...
    99+
    2023-09-04
    java jvm 开发语言 javase 面向对象
  • Java抽象类(基础详解)
    目录 1.概念 2.抽象类的使用 2.1抽象方法 2.2抽象类 2.3抽象类的使用 2.4注意事项 1.概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法,普通方法,static方法,常量和变量等内容...
    99+
    2023-10-21
    java 开发语言
  • 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 抽象类 接口
  • JAVA抽象类,接口,内部类详解
    目录一.内容抽象类抽象方法与抽象类抽象类的使用接口接口的概念接口的定义接口中的成员变量接口中的方法接口的继承接口的实现/使用接口与抽象类的差异面向接口编程内部类非静态内部类静态内部类...
    99+
    2022-11-12
  • 详细讲解Java抽象类示例
    目录Java抽象类概念Java抽象类示例继承Animal类的子类的示例Java抽象类详细使用方法1、定义抽象类2、继承抽象类3、实现抽象方法4、完整示例代码Java抽象类概念 Jav...
    99+
    2023-05-19
    Java 抽象 抽象类
  • Java语法之 Java 的多态、抽象类和接口
    目录一、多态1.向上转型2.动态绑定3.方法重写4.向下转型5.关键字super6.在构造方法中调用重写方法(坑)7.理解多态8.小结二、抽象类1.概念2.注意事项3.抽象类的意义3...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作