java — 重载和覆盖

重载(overload):对于类的方法,方法名相同,参数列表不同的方法之间构成了重载关系。
参数列表:参数的类型、参数的个数、参数的顺序。
子类从父类继承来的方法也可以发生重载。
如果多个方法有相同的名字、不同的参数,便产生了重载。编译器必须挑选出具体执行哪个方法,通过各个方法给出的参数类型与特定的方法调用所使用的值类型进行匹配来挑选出相应的方法。
如果找不到匹配的参数,或者有多个可能的匹配,就会产生编译时错误。
重载关系只能发生在同一个类中吗?不是的。
这时候你要深刻理解继承,要知道一个子类所拥有的成员除了自己显式写出来的以外,还有父类遗传下来的。所以子类中的某个方法和父类中继承下来的方法也可以发生重载的关系。
看方法之间是否是重载关系,不用管方法的修饰符和返回类型以及抛出的异常,只看方法名和参数列表。而且要记住,构造器也可以重载。
package OverloadAndOverride; public class Dog
{
Dog()
{ } void bark()
{
System.out.println("no barking!");
this.bark("123", 123.2 );
} void bark(String m, double l)
{
System.out.println("a barking dog.");
this.bark(5, "china");
} void bark(int a, String n)
{
System.out.println("a cute cat.");
} public static void main(String[] args)
{
Dog dog = new Dog();
dog.bark();
dog.bark(5, "123");
dog.bark("123", 1);
} }
输出结果:
no barking!
a barking dog.
a cute cat.
a cute cat.
a barking dog.
a cute cat.
再看一个重载的例子
package OverloadAndOverride; public class OverrideTest
{
void max(int a, int b)
{
System.out.println(a > b ? a:b);
} void max(short a, short b)
{
System.out.println(a > b ? a:b);
} void max(float a, float b)
{
System.out.println(a > b ? a:b);
} public static void main(String[] args)
{
OverrideTest test = new OverrideTest();
//调用int的
int a1 = 1;
int a2 = 2;
test.max(a1, a2); //调用double的
float a3 = 1;
float a4 = 2;
test.max(a3, a4); //调用short的
short a5 = 1;
short a6 = 2;
test.max(a5, a6); } }
输出结果:
2
2.0
2
覆盖(override):当父类中的某些方法不能满足需要的时候,子类改写父类的方法,当父类中的方法被覆盖之后,除非使用super关键字,否则无法再调用父类的方法。
覆盖的条件:
1、“三同一不低”:方法名称、参数列表、返回类型相同,子类的访问修饰符的权限不能比父类低;
2、子类方法不能比父类抛出更多的异常。即子类所抛出的异常必须和父类方法所抛出的异常一致,或子类中不抛出异常;
3、被覆盖的方法不能是final类型的,因为final类型的方法无法被子类覆盖;
4、被覆盖的方法不能是private类型的,否则在子类中只是定义类一个新的方法,并没有对其进行覆盖;
5、被覆盖的方法不能是static类型的,如果父类的方法为static类型的,而子类的方法不是static类型的,那么两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然,即使父类和子类中的方法都是static类型的,并且满足覆盖条件,但是仍然不会发生覆盖,因为static是在编译的时候将静态方法和类的引用类型进行匹配。

java — 重载和覆盖的更多相关文章
- Java重载和覆盖
重写 Overriding 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 1.参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载. 2.返 ...
- Java之重载与覆盖
有的时候,类的同一种功能有多种实现方式,到底采用哪种实现方式,取决于调用者给定的参数.例如我们最常用的System.out.println()能够打印出任何数据类型的数据,它有多种实现方式.运行时,J ...
- Java 泛型 协变式覆盖和泛型重载
Java 泛型 协变式覆盖和泛型重载 @author ixenos 1.协变式覆盖(Override) 在JDK 1.4及以前,子类方法如果要覆盖超类的某个方法,必须具有完全相同的方法签名,包括返回值 ...
- java系列--重载和覆盖小结
继承中属性的隐藏和方法的覆盖 java中规定,子类用于隐藏的变量可以和父类的访问权限不同,如果访问权限被改变,则以子类的权限为准 java中允许子类的变量与父类变量的类型完全不同, ...
- java中方法的重载和覆盖
java中方法的重载和覆盖 先来了解一下这两个名词的含义. 重载: 在一个类当中才可以重载,方法名相同,参数个数不同或参数个数相同而参数类型不同. 覆盖: 又称重写,在派生类(子类)中重写基类(父类) ...
- java的重载、覆盖和隐藏的区别
重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...
- java中重载、覆盖和隐藏三者的区别分析
重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...
- Java基础知识(重载和覆盖)
重载(overload): 在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了. 即当函数同名时,只看参数列表.和返回值类型没关系. 重 ...
- java中方法的重载和覆盖分别要满足的条件
1.重载:遵循“两同三不同” 两同:同一个类中的同名方法 三不同:形参的类型,个数,顺序不同 特别提醒: 返回值不同构不能方法重载 形参名称不同构不成方法重载 2.覆盖(重写)的要求 子类方法的名称, ...
随机推荐
- 获取当前对象的key的名称
获取当前对象的key的名称(无法获取),只能曲线救国 通过给标签添加class,id, 然后通过对class的遍历,来获取到id(这个id对应数据库的字段,所以对应对象的key) 然后再给 id 赋值 ...
- 微信小程序快速转成百度小程序的方法
1.安装Node.js(>8.5.0)https://nodejs.org/ npm升级到最新版本的方法:npm install -g npm自动更新到最新版本 2.配置cnpm:在命令行中输入 ...
- Java设计模式(21)——行为模式之备忘录模式(Memento)
一.概述 概念 UML简图 角色 根据下图得到角色 备忘录角色(Memento).发起人角色(Originator).负责人角色(Caretaker) 二.实践 使用白箱实现,给出角色的代码: 发起人 ...
- 优步UBER司机全国各地奖励政策汇总 (3月7日-3月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- javaweb(四)——Http协议(请求头,响应头详解)
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- Linux用户及权限
库:lib 共享库:.so ,shared object, 权限: 用户,获取资源,服务的标识符 组,指派权限,标识符 进程:以某个用户的身份在进行,有属主和属组 安全上下文(security con ...
- Linux命令应用大词典-第12章 程序编译
12.1 gcc:GNU项目的C和C++编译器 12.2 gdberver:为GNU调试的远程服务器 12.3 cmake:跨平台的Makefile生成工具 12.4 indent:更改通过插入或删除 ...
- 第六阶段·数据库MySQL及NoSQL实践 第2章·Redis
01-Redis简介 02-Redis基本安装启动 03-Redis的配置文件基本使用 04-Redis安全管理 05-Redis安全持久化-RDB持久化 06-Redis安全持久化-AOF持久化 0 ...
- 第一章 了解TCP/IP协议族
第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...
- Java开发工程师(Web方向) - 03.数据库开发 - 第1章.JDBC
第1章--JDBC JDBC基础 通过Java Database Connectivity可以实现Java程序对后端数据库的访问 一个完整的数据库部署架构,通常是由客户端和服务器端两部分组成 客户端封 ...