精华内容
下载资源
问答
  • 多态的表现形式
    千次阅读
    2021-03-17 14:05:41

    多态有四种体现形式:

    1.    接口和接口继承

    2.    类和继承

    3.    重载。

    4.    重写。

    其中重载和重写为核心。

    重载:重载发生在同一个类中,在该类中如果存在多个同名方法,但是方法的参数类型和个数不一样,那么说明该方法被重载了。

    重写:重写发生在子类继承父类的关系中,父类中的方法被子类继承,方法名,返回值类型,参数完全一样,但是方法体不一样,那么说明父类中的该方法被子类重写了。

    更多相关内容
  • Java中多态表现形式

    千次阅读 2019-02-06 20:28:25
    概念:同一个类实例的相同方法在不同情形下有不同的表现形式 方法多态: 方法重载:同一个方法名称可以根据参数的类型或个数不同调用不同的方法体 方法覆写:同一个父类的方法可以根据实例化子类的不同也有不同的...

    概念:同一个类实例的相同方法在不同情形下有不同的表现形式

    在Java中,对于多态的核心表现主要有以下两点:

    1. 方法多态:

    ① 方法重载:同一个方法名称可以根据参数的类型或个数不同调用不同的方法体

    ② 方法覆写:同一个父类的方法可以根据实例化子类的不同也有不同的实现

    方法多态之前的文章里面详细阐述过,在此不再赘述。

    2. 对象多态:

    ① 向上转型(90%):

    天然发生,认爹过程,指的是将子类对象变成父类对象

    语法:父类 父类引用 = 子类实例;,例如Person per = new Student();

    class Person {
        public void print() {
            System.out.println("父类");
        }
    }
    class Student extends Person {
        public void print() {
            System.out.println("子类");
        }
    }
    public class XiangShangZhuanXing {
        public static void main(String[] args) {
            Person per = new Student();
            per.print();
        }
    }
    

    在这里插入图片描述

    • 结论:不管是否发生了向上转型,核心本质还是在于:你使用的是哪一个子类(new在哪里),而且调用的方法是否被子类所覆写了。

    应用场景:参数统一化

    例如:要求定义一个方法,这个方法可以接收Person类的所有子类实例,并调用Person类的方法。

    class Person {
        public void print() {
            System.out.println("1.我是人类!");
        }
    }
    class Student extends Person {
        public void print() {
            System.out.println("2.我是学生!");
        }
    }
    class Worker extends Person {
        public void print() {
            System.out.println("3.我是工人!");
        }
    }
    public class CanShuTongYiHua {
        public static void main(String[] args) {
            //Person per = new Student();
            WhoYouAre(new Student());
            //Person per = new Worker();
            WhoYouAre(new Worker());
        }
        public static void WhoYouAre(Person per) {
            per.print();
        } 
    }
    

    在这里插入图片描述

    ② 向下转型(1%):

    需要强转,指的是将父类对象变成子类对象

    语法:子类 子类实例 = (子类)父类实例;,例如Student stu = (Student) per;

    • 问题:向下转型存在的意义或者为什么我们需要向下转型?
    class Person {
        public void print() {
            System.out.println("父类");
        }
    }
    class Student extends Person {
        public void print() {
            System.out.println("子类");
        }
        public void fun() {
            System.out.println("只有子类有");
        }
    }
    public class XiangXiaZhuanXing {
        public static void main(String[] args) {
            Person per = new Student();
            per.print();
            System.out.println("==========");
            Student stu = (Student) per;
            stu.fun();
        }
    }
    

    在这里插入图片描述

    • 结论:在上述代码中父类能调用的就只有本类定义好的方法,并没有Student类中的fun()方法,如果父类要想调用fun()方法就只能进行向下转型处理,总的来说就是当需要子类扩充操作的时候就要采用向下转型。

    应用场景:发生在父类引用需要调用子类扩充方法时,才发生向下转型变为子类引用调用其扩充方法

    注意:并不是所有的父类对象都可以向下转型 ,如果要想进行向下操作之前,前提是一定要首先发生向上转型,否则在转型时会出现ClassCastException(运行时异常,类型转换异常,发生在两个毫无关系的两个类之间的强转时)

    观察错误转型:

    class Person {
        public void print() {
            System.out.println("父类");
        }
    }
    class Student extends Person {
        public void print() {
            System.out.println("子类");
        }
        public void fun() {
            System.out.println("只有子类有");
        }
    }
    public class XiangXiaZhuanXing {
        public static void main(String[] args) {
            Person per = new Person();
            per.print();
            System.out.println("==========");
            Student stu = (Student) per;
            stu.fun();
        }
    }
    

    在这里插入图片描述

    • 结论:上述代码进行向下转型之前Person per = new Person();没有先进行向上转型,所以出现类型转换异常这个错误。
    • 问题 :如果向下转型存在安全隐患,那么如何转型才靠谱呢?

    最好的做法就是先进行判断,而后再进行转型,那么就可以依靠关键字instanceof实现。

    引用对象 instanceof 类:表示该引用能指向该类,返回true表示可以指向,返回flase表示不能指向。

    因此,向下转型的标准格式为:

    if(!(per instanceof Student)) {
    	per = new Student();   // 先建立起联系
    }
    Student stu = (Student) per;
    

    观察instanceof操作:

    class Person {
        public void print() {
            System.out.println("父类");
        }
    }
    class Student extends Person {
        public void print() {
            System.out.println("子类");
        }
        public void fun() {
            System.out.println("只有子类有");
        }
    }
    public class XiangXiaZhuanXing {
        public static void main(String[] args) {
            Person per = new Person();
            //避免ClassCastException
            if(!(per instanceof Student)) {
                per = new Student();
            }
            Student stu = (Student) per;
            stu.fun();
        }
    }
    

    在这里插入图片描述

    • 结论:我们可以看到加上instanceof之后就算没有先向上转型,向下转型依然是可以进行的。
    总结:
    • 对象的多态性(向上转型或向下转型)本质在于方法的覆写。
    • 通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下转型,有安全隐患)。
    • 两个没有关系的类对象是不能够进行转型的,一定会出现ClassCastException。
    展开全文
  • java多态的三种表现形式

    千次阅读 2021-06-19 12:17:53
    前言 MyBatis是一个支持普通SQL查询、存储过程和高级映射的优秀持久层框架。MyBatis 去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解进行配置和原始映射,以将...

    前言

    MyBatis是一个支持普通SQL查询、存储过程和高级映射的优秀持久层框架。MyBatis 去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解进行配置和原始映射,以将接口和Java的POJO (Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

    MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,以实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,做到可以在不修改程序代码的情况下,直接在配置文件中修改SQL。

    在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力。

    目录

    进入Spring Boot世界

    讲述Sping、Spring Boot 和Spring Cloud 之间的关系,还重点讲述了如何利用开发工具(如IDEA)来实现开发,如何通过API文档来寻找类对象方法,告诉我们在开发过程中如何学习、发现和解决问题

    image

    image

    需要免费领取这份Alibaba架构师耗时一年整理的《Spring Boot实战,让你的开发像搭积木一样简单 》的朋友,可以在文末免费领取

    准备开发环境

    首先介绍搭建开发Spring Boot的环境,然后介绍项目管理模型文件pom.xml,最后讲解如何设置国内仓库。讲述了Java环境的搭建,以及开发工具的使用。

    image

    image

    使用开发工具

    详细介绍开发工具IDEA、Eclipse、STS,以及流行插件的安装和配置。本章将利用IDEA开发、运行和打包发布第一个Spring Boot应用程序"Hello World"。在介绍IDEA实用技能的同时,还会详细比较IDEA和Eclipse的区别,以及如何在各个开发工具中使用本书的随书源代码。

    image

    image

    基础篇

    基础篇,尤其是对入门读者来说特别适用。

    Spring Boot基础

    首先介绍Spring Boot的基础知识:然后讲解如何定制启动画面、实现热部署:最后介绍如何使用配置文件,以及通过配置文件配置多环境。

    image

    image

    分层开发Web应用程序

    介绍Web开发中最常用的分层开发的模式MVC ( Model View Controller );然后讲解视图技术Thymeleaf的语法和实用技术,并用实例讲解如何将MVC三者联系起来构建Web应用程序;最后通过实例讲解如何用Validator实现数据验证,以及如何自定义数据验证。

    image

    image

    响应式编程

    首先介绍响应式编程的基本概念,并对比分析MVC和WebFlux模式,用实例讲解如何进行WebFlux的开发; 然后讲解用MVC及响应式开发方式开发WebFlux的方法;最后用WebFlux模式结合MongoDB数据库实现数据的增加、删除、修改和查询。

    image

    image

    进阶篇

    在理论讲解部分让我们明白工作中需要的技术重点,再以实例让我们深入学习,提高技术水平,轻松迎接工作,真真切切地将知识点和实操技能应用到工作中。

    Spring Boot进阶

    介绍AOP、loC、Servlet 容器;然后深入讲解自动配置原理、自定义Starter、自定义注解;最后讲解异常的处理,以及如何进行单元测试。

    image

    image

    用ORM操作SQL数据库

    介绍如何使用ORM ( JPA、MyBatis )操作数据库;然后讲解常用的查询方式、自定义查询方式、原生SQL (Structured Query Language,结构化查询语言)的开发和映射,还会深入地讲解一对一、-对多、多对多的关系映射操作以及事务的使用;最后对比分析JPA和MyBatis的区别。

    image

    image

    接口架构风格——RESTful

    RESTful是非常流行的架构设计风格。本章首先介绍REST的特征、HTTP方法与CRUD动作映射;然后讲解如何基于Spring Boot为PC、手机APP构建统- -风格的Restful API; 最后讲解在Spring Boot下如何使用RestTemplate发送GET、POST、DELETE、PUT等请求。

    image

    image

    集成安全框架,实现安全认证和授权

    介绍如何使用Spring Security 创建独立验证的管理员权限系统、会员系统,讲解如何进行分表、分权限、分登录入口、分认证接口、多注册接口,以及RBAC权限的设计和实现,如何使用JWT为手机APP提供token认证;然后讲解Apache的Shiro安全框架的基本理论基础,以及如何使用Shiro构建完整的用户权限系统;最后对比分析Spring Security和Shiro的区别。

    image

    image

    在Spring Boot中使用Redis实现高并发

    Redis是大规模互联网应用常用的内存高速缓存数据库,它的读写速度非常快,据官方Bench-mark的数据,它读的速度能到11万次/秒,写的速度是8.1万次/秒。

    首先介绍Redis的原理、概念、数据类型;然后用完整的实例来帮助读者体验缓存增加、删除、修改和查询功能,以及使用Redis实现文章缓存并统计点击量;最后讲解分布式Session的使用。

    image

    image

    用RabbitMQ实现系统间的数据交换

    RabbitMQ是近年来使用非常广泛的消息中间件。

    首先介绍它的原理、概念、6种工作模式、常用的注解:然后用实例讲解在Spring Boot中如何使用AmapT emplate接口实现消息的发送和监听。

    image

    image

    集成NoSQL数据库实现搜索引擎

    关于搜索引擎,我们很难实现Elasticsearch和Solr两大搜索框架的效果。所以针对两大搜索框架,非常详细地讲解了它们的原理和具体使用方法。首先介绍什么是搜索引擎、如何用MySQL实现简单的搜索引擎,以及Elasticsearch 的概念和接口类;然后介绍Elasticsearch的精准、模糊、范围、组合、分页、聚合查询;最后介绍Solr的概念、安装、配置和使用,并对两大搜索框架进行比较。

    让我们可以在短时间内从一个技术“菜鸟”成长为技术“达人

    image

    image

    项目实战

    开发企业级通用的后台系统

    使用Spring Boot,免不了开发后台系统。所以,通过实现-一个基于角色的访问控制后台系统,来系统地介绍如何使用Spring Security。

    image

    image

    实现一个类似“京东”的电子商务商城

    为了综合使用本书讲解的Spring Security、 Redis、RabbitMQ、 JPA、JWT技术,通过实例来整合这些技术。

    首先讲解如何整合管理系统和会员系统实现多用户系统;然后讲解如何实现会员系统的多湍、多方式注册和登录;最后讲解如何实现购物、下单、秒杀,以及订单自动取消功能。

    image

    image

    新业务转入Spring Boot技术栈之后,员工好招聘了( Java开发者多,有Java基础能很快上手使用),它使得开发速度、开发成本和业务运营效果都得到了飞速提升。没用太多时间,同事们就使用Spring Boot构建了公司的第一个大数据开发框架。它整合了Spark、Elasticsearch、RabbitMQ、Redis 等,实现了数据挖掘、自动预测趋势、关联分析、聚类、概念描述、偏差检测等。

    Spring Boot 的配置、使用、监控、部署都很简单,它拥有完善的生态。后期如果因为项目流量太大需要切换到微服务Spring Cloud (基于Spring Boot )也会极为顺利。可以预想,未来会有越来越多的公司采用Spring Boot,更会有越来越多的开发者关注和使用Spring Boot。

    读者福利

    分享一份自己整理好的Java面试手册,还有一些面试题pdf

    领取方式;关注+点赞后,戳这里即可免费领取

    不要停下自己学习的脚步

    字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

    字节跳动的面试分享,为了拿下这个offer鬼知道我经历了什么

    赞后,戳这里即可免费领取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**

    不要停下自己学习的脚步

    [外链图片转存中…(img-lbeojAo3-1624076268609)]

    [外链图片转存中…(img-mXQcxnt6-1624076268609)]

    展开全文
  • 多态的四种表现形式

    万次阅读 2019-07-24 10:56:41
    多态的四种表现形式 在之前一提到多态,我下意识就是虚函数重写构成的运行时多态。直到看了一篇文章,才反应过来多态有四种表现形式。cpp-polymorphism 运行时多态(虚函数) 编译时多态(模板) 重载 类型转换 运行时...

    多态的四种表现形式

    在之前一提到多态,我下意识就是虚函数重写构成的运行时多态。直到看了一篇文章,才反应过来多态有四种表现形式。cpp-polymorphism

    • 运行时多态(虚函数)
    • 编译时多态(模板)
    • 重载
    • 类型转换

    运行时多态(Subtype Polymorphism/Runtime Polymorphism)

    运行时多态就是派生类重写基类的虚函数,在调用函数里,参数为基类的指针或引用,会构成多态。我之前写过一篇多态的原理,就是在讲多态(运行时多态)在底层是怎么实现的

    多态的实现原理

    举个例子:比如买票这个行为,成人去买就是全价,学生买就是半价票。但是不管成人还是学生都是人这个体系。所以我们需要根据谁来买票才能决定价格,这个时候就需要多态。

    #include <iostream>
    
    class ticket
    {
    public:
    	virtual void price() = 0;
    };
    
    class adult : public ticket
    {
    public:
    	virtual void price() override
    	{
    		std::cout << "成人全价!" << std::endl;
    	}
    };
    
    class student : public ticket
    {
    public:
    	virtual void price() override
    	{
    		std::cout << "学生半价!" << std::endl;
    	}
    };
    
    void BuyTicket(ticket& t)
    {
    	t.price();
    }
    
    int main(void)
    {
    	adult a;
    	student s;
    
    	BuyTicket(a);
    	BuyTicket(s);
    	return 0;
    }
    

    在这里插入图片描述

    编译时多态(Parametric Polymorphism/Compile-Time Polymorphism)

    编译时多态就是模板。在程序编译时,编译器根据参数的类型,就将生成某种类型的函数或类。我之前关于模板的总结:

    C++泛类–函数模板、类模板

    举个简单的例子:Add() 函数是一个非常简单的函数,但是如果你写一个整型的 Add 函数,那么我想加 double 型的呢?你再写一个 double 型的 Add 函数,那么我想加 char 型的呢?

    这个时候就用到了模板,我们先定义一个逻辑,具体类型等编译时再生成该类型的函数或类。

    #include <iostream>
    
    template<class T>
    T Add(T lhs, T rhs)
    {
    	return lhs + rhs;
    }
    
    int main(void)
    {
    	Add(1, 2);
    	Add(2.0, 3.0);
    	Add('a', 'b');
    	return 0;
    }
    

    重载(Ad-hoc Polymorphism/Overloading)

    函数名相同,参数不同就构成了重载。重载主要用于函数,当某个函数的功能无法处理某些参数的情况时,我们就可以重载一个函数来单独处理。

    举个例子:比如说上面的 Add 函数,当前内置类型都可以处理,但是如果我传两个字符串怎么办?就不可以像刚才那么加了。得重载一个函数单独处理。

    #include <iostream>
    #include <string>
    
    int Add(int lhs, int rhs)
    {
    	return lhs + rhs;
    }
    
    std::string Add(const std::string& lhs, const std::string& rhs)
    {
    	std::string ans(lhs);
    	ans += rhs;
    
    	return ans;
    }
    
    int main(void)
    {
    	Add(1, 2);
    	Add("abc", "def");
    
    	return 0;
    }
    

    类型转换(Coercion Polymorphism/Casting)

    类型转换主要分为四种:

    • static_cast: 相当于隐式类型转换。
    • const_cast: 这个可以去除一个 const 变量的 const 性质,使可以改变它的值。
    • reinterpret_cast: 相当于强制类型转换。
    • dynamic_cast: 这个可以使子类指针或引用赋值给父类指针或引用。

    类型转换很简单,这里就不多赘述了。

    Ending

    这篇博客主要是强调了多态有四种形式,并不单单是运行时多态。

    展开全文
  • 多态的三种表现形式以及案例分析

    万次阅读 2018-08-30 11:26:59
    首先多态的三种表现形式: 继承,重写,父类引用指向子类对象。 下面案例介绍和分析: 父类- HttpServlet public class HttpServlet { public void service() { System.out.println("HttpServlet - ...
  • 多态: # 需求:老张开车去东北 # 人类 车类 # 飞机类 # 轮船 # ... # 缺点:增加新交通工具(飞机,摩托车...) # 人类的代码需要修改 class Person: def __init__(self, name=""): self.name = name def go_to...
  • 多态表现形式有哪些?

    千次阅读 2019-08-28 08:42:23
    1.方法重载 通常在一个类中,相同的方法对应着不同的方法实现,这些方法名相同的方法其区别在于方法参数不同。 2.方法重写 ...在多态机制中,接口比抽象类使用起来更方便,而抽象类组成的集合就是接...
  • [Java教程]多态性的表现形式

    千次阅读 2021-03-17 10:52:51
    [Java教程]多态性的表现形式0 2015-09-05 19:00:161.什么是多态面向对象的多态性就是将父类对象应用到子类对象的特征。简单地讲,多态指的就是在应用程序中出现的“重名”现象。多态性允许以统一的风格编写程序,以...
  • java多态的多种表现形式

    千次阅读 2020-01-31 21:17:54
    多态是面向对象编程的一个重要特性,父类中的属性方法被子类继承之后,可以具有不同的数据类型和表现出不同的行为,这可以让同一方法在其父类及其各个子类中具有不同含义 很简单,打个比方,有 Father 父类和 Son ...
  • JAVA中的多态表现形式

    2012-06-13 18:18:06
    表现形式。 我看thinking in java3中的多态 People are often confused by other, non-object-oriented features of Java, like method overloading, which are sometimes presented as object-oriented. Don’t ...
  • 多态的两种表现形式

    千次阅读 2018-04-18 15:00:41
    多态的概念:同一个方法名称,执行不同的操作多态的两种形式: 重写和重载重写概念:在继承过程中,子类定义了与...参数不同的表现形式为个数不同,类型不同,顺序不同重载的好处:增加代码的而灵活性注意事项: j...
  • 类的“多态

    2021-02-03 20:35:48
    多态1)、什么是多态多态指的是同一种类型的事物,不同的形态2)、多态的目的“多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)3)、多态的三种表现形式① ...
  • java中多态表现形式

    2021-04-18 02:46:03
    java类的继承与多态实验报告_工学_高等教育_教育专区。实验报告 课程名称 面向对象程序设计 实验名称 实验三、类的继承与多态 日期 2018/4/23 学生学号 姓名 ......科技信息 计算机与网络 J a va 语言中动态多态性的...
  • 1、方法重载:通常是指在同-一个类中,相同的方法名对应着不同的方法实现,这些方法名相同的方法其 区别在于他们需要的参数不同;... 4、接口:在多态机制中,接口比抽象类使用起来更加方便。而抽象类组成的集合就是接口。
  • 所谓的“多态”,简单的理解就是对象在不同情况下的不同表现,具体体现在定义和功能两个方面,简单的总结一下,多态可以用“三个定义和两个方法”来总结。三个定义分别是父类定义子类构建、接口定义实现类构建和抽象...
  • 一、多态是继封装、继承之后,面向对象的第三大特性。现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。 Java作为面向对象的语言,同样可以描述一个...
  • 多态与鸭子类型

    2021-01-14 18:44:35
    [TOC]## 多态多态指的是一类事物有多种形态,比如动物有多种形态:人,狗,猪~~~import abcclass Animal(metaclass=abc.ABCMeta): #同一类事物:动物@abc.abstractmethoddef talk(self):passclass People(Animal): #...
  • 泛型是多态表现形式吗?解答。。。
  • 多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后...a、编译时多态性(静态多态):通过重载函数实现 b、运行时多态性(动态多态):通过虚函数实现。 多态的作用 那么多态的作用是...
  • 关于多态三种基本形式

    千次阅读 2022-06-10 16:06:20
    java学习笔记——多态
  • 的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural)... C++支持多种形式多态,从表现形式来看,有虚函数、模板、重载等,从绑定时间来看,可以分成静态多态
  • C++中的多态

    2019-07-09 14:17:26
    多态的概念 1. What is Polymorphism?...1.2. 截止目前:多态性有两种表现的方式 1.2.1. 重载多态: class C { public: int f(int x); int f( ); }; 1.2.2. 子类型多态:不同的对象...
  • java的多态表现在哪里

    千次阅读 2019-04-14 21:52:33
    多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 比如同一个打印机,可以打印黑白的纸张也可以打印彩色的,同样是人,却有黑人白人之分。 ...
  • 多态可以分为重载、改写、多态变量、泛型四种形式。 1、 重载(Overload) 是在一个类里面,方法名字相同,而参数(个数或者类型)不同。 通俗来讲,就是两个函数名相同而类型签名不同,他们之间构成重载关系。 但是...
  • 本文实例讲述了Python面向对象编程之继承与多态。分享给大家供大家参考,具体如下: Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新...
  • Java多态表现形式

    2020-06-13 18:04:52
    Java多态中,表现形式有哪些,方法的重载算不算
  • 多态形式与作用

    2019-12-26 16:42:34
    多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,477
精华内容 15,790
关键字:

多态的表现形式

友情链接: ad438.zip