java 多态 重载的区别_重写、覆盖、重载、多态几个概念的区别分析
override->重写(=覆盖)、overload->重载、polymorphism -> 多态
override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
重写(覆盖)的规则:
1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
3、重写的方法的返回值必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。
overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
多态的概念比较复杂,有多种意义的多态,一个有趣但不严谨的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
一般,我们使用多态是为了避免在父类里大量重载引起代码臃肿且难于维护。
举个例子:
public class Shape
{
public static void main(String[] args){
Triangle tri = new Triangle();
System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承
Shape shape = new Triangle();
System.out.println("My shape has " + shape.getSides() + " sides."); // 多态
Rectangle Rec = new Rectangle();
Shape shape2 = Rec;
System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重载
}
public boolean isShape(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){ //重载
return 3 ;
}
public int getSides(Rectangle rec){ //重载
return 4 ;
}
}
class Triangle extends Shape
{
public int getSides() { //重写,实现多态
return 3;
}
}
class Rectangle extends Shape
{
public int getSides(int i) { //重载
return i;
}
}
注意Triangle类的方法是重写,而Rectangle类的方法是重载。对两者比较,可以发现多态对重载的优点:
如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;
如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。
java 多态 重载的区别_重写、覆盖、重载、多态几个概念的区别分析相关推荐
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...
- Java笔记013-IDEA、包、访问修饰符、封装、继承、多态、Super、方法重写/覆盖(override)、java的动态绑定机制
目录 面向对象编程(中级部分) IDE(集成开发环境)-IDEA IDEA介绍 IDE(集成开发环境)-Eclipse Eclipse介绍 IDEA的安装 IDEA的基本介绍和使用 创建一个java项 ...
- C++重载(overload)和重写(覆盖)的区别?
重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同). 重写:是指子类重新定义父类虚函数的方法. 从实现原理上来说: 重载:编译器根据函数不同的 ...
- java与众包的联系_众包、众筹和众创是什么 三者区别与联系
问题: 众包,众筹,众创这三者的概念,区别和联系是什么? 好像还有一个众扶,,, 看了一下百科的介绍,还不是太明白,请大家给解答一下,谢谢了 回答1: 众筹,现在基本用来表达向共众筹钱: 众包,现在基 ...
- IC授权卡和复制卡的区别_信用卡小知识【芯片卡磁条卡的区别】
各位老板,企业家大家好,我是小胡,您身边的金融专家. 今天呢跟大家说一下信用卡芯片卡和磁条卡的区别? 信用卡呢,现在普及率非常高的.几乎是人手一张或者是多张.那么大家知道芯片卡和磁条卡的区别到底在哪里 ...
- JAVA入门级教学之(方法重写/方法重载)
方法重写: package com.lbj.javase10;public class Bird extends Animal {public void move(){System.out.print ...
- java中的重写与重载_java中的重写与重载
1.重写 重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的:若 ...
- java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!
智能手机系统的发展从如今的百花齐放在到三足立鼎,而发展到了现在则是安卓与ios两家平分天下.谁的系统好用?到底是IOS好呢,还是安卓系统好呢?至今没有一个结果.那么Android与iOS到底有什么区别 ...
- 从java多态到策略模式_设计模式中的多态——策略模式详解
2. 策略模式详解 2.1 策略模式定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户端而独立的变化. 可以使用多态进行类比来理解策略模 ...
最新文章
- GitHub超4.1万星,最全Python入门算法来了
- js html css淘宝足迹日历效果,js实现简单的日历显示效果函数示例
- 帷幕的帷是什么意思_俗语:“宁娶寡妇,不娶生妻!”什么是“生妻”?老祖宗智慧...
- linux_一些shell命令分析记录
- 【转】Odoo装饰器: one装饰
- IOS流水布局UICollectionView使用FlowLayout进行自由灵活组合
- 【Go】panic: reflect: call of reflect.Value.FieldByName on ptr Value
- 54-locate 简明笔记
- qtp 连接mysql_QTP连接MySQL
- 各大组织大马默认密码
- dosbox详细安装级及使用
- 程序员-人事面试题、包含缺点、优点、自我介绍、范文
- python爬虫 抓取豆瓣电影 电影分类排行榜的所有数据
- python m4a转mp3_python脚本实现音频m4a格式转成MP3格式
- Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)
- 第六届“强网杯”青少年专项赛 writewp by 楠辞姐姐后援团
- android 浏览器源码分析,android webview 简单浏览器实现代码
- QImage 图像格式小结 Format_RGB32
- JavaSE —— 000基础版
- 机器学习常见损失函数,二元交叉熵,类别交叉熵,MSE,稀疏类别交叉熵
热门文章
- scala 编程 ——类型限定与泛型编程
- 三局两胜还是五局三胜?
- C++11::遍历tuple中的元素
- linux ubuntu 获取ip,linux系统(ubuntu)怎么查看ip地址
- 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码
- python计算工资编程-Python工程师薪水居然这么高
- python工资高还是java-python工资高还是java
- python编程入门书籍-python入门书籍推荐
- 语音识别模型_语音 识别_语音识别 - 云+社区 - 腾讯云
- 语音识别相关书籍抖音十大先看哪一本最好