前言

有时候我真的分不清方法重载和方法重写,总数把这两个混淆

特此记录下此片文章,方便以后自己查询时不用再去Baidu、Google、Bing了

Java 重载与重写是什么?有什么区别?

重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的 同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时 通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)

public MySurfaceView(Cotext context,AttributeSet attrs,int defStyle){

super(context,attrs,defStyle);

initView();

}

public MySurfaceView(Cotext context,AttributeSet attrs){

super(context,attrs);

initView();

}

public MySurfaceView(Cotext context){

super(context);

initView();

}

重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用 super 关键字

public class LoginActivity extends Activity{

private EditText et_name;

private EditText et_password;

private Button btn_login;

private TextView tv_regist;

String username;

String password;

ProgressDialog p;

@Override

protected void onCreate(Bundle savedInstanceState){

requestWindowFeature(Window.FEATURE_NO_TITLE);

super.onCreate(savedInstanceState);//继承原类中的方法,但在遇到同名方法时会覆盖原方法,使用当前写的方法

setContentView(R.layout.login);

init();

//新方法

tv_regist.setOnClickListener(new registListener());

btn_login.setOnClickListener(new registListener());

}

}

重载规则:必须具有不同的参数列表;可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不同的异常。 重写规则: 重写规则:参数列表必须完全与被重写的方法相同,否则不能称其为重写;返回类型必须一直与被重写的方法相同,否则不能称其为重写;访问修饰符的限制一定要大于等于被重写方法的访问修饰符;重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,譬如父类方法声明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException 的子类异常,可以抛出非检查异常。

重载与重写是 Java多态性的不同表现。       重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)       而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。

Java 构造方法能否被重写和重载?

重写是子类方法重写父类的方法,重写的方法名不变,而类的构造方法名必须与类名一致,假设父类的构造方法如果能够被子类重写则子类类名必须与父类类名一致才行,所以 Java 的构造方法是 不能被重写的。而重载是针对同一个的,所以构造方法 可以被重载

下面程序的运行结果是什么,为什么?

public class Demo {

public boolean equals( Demo other) {

System.out.println("use Demo equals." );

return true;

}

public static void main(String[] args) {

Object o1 =new Demo ();

Object o2 =new Demo ();

Demo o3 =new Demo ();

Demo o4 =new Demo ();

if (o1.equals(o2)) {

System.out.println("o1 is equal with o2.");

}

if(o3.equals(o4)) {

System.out.println("o3 is equal with o4.");

}

}

}

答:上面程序的运行结果如下

use Demo equals.

o3 is equal with o4.

因为 Demo 类中的 public boolean equals(Demo other) 方法并没有重写 Object 类中的 public boolean equals(Object obj) 方法,原因是其违背了参数规则,其中一个是 Demo 类型而另一个是 Object 类型,因此这两个方法是重载关系(发生在编译时)而不是重写关系; 故当调用o1.equals(o2)时,o2是Object类型参数,实际上调用了Object类中的publicbooleanequals(Objectobj)方法。因为在编译时 o1 和 o2 都是 Object 类型,而 Object类的equals 方法是通过比较内存地址才返回 false;当调用 o3.equals(o4) 时,实际上调用了 Demo 类中的 equals(Demo other) 方法,因为在编译时 o3 和 o4 都是 Demo 类型的,所以才有上面的打印。

【转载】: https://blog.csdn.net/qunqunstyle99/article/details/81007712

为什么不能根据返回类型来区分重载_Java重载和重写的区别相关推荐

  1. java构造方法重载_Java 重载、重写、构造函数的实例详解

    Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定 ...

  2. java方法的重载和方法的重写的区别

    方法的重载和方法的重写的区别: 方法重载:同一个类,方法名相同,参数类型不同,参数个数不同,跟返回值无关. 方法重写:必须是子类和父类之间,方法名相同,参数类型相同,参数个数相同,返回类型相同. 区别 ...

  3. 为什么不能根据返回类型来区分重载

    方法重载:同一个类中的多个方法有相同的名字,但这些方法的参数列表不同,参数的数量或参数类型不能完全相同. 方法重写:存在子父类之间的,,子类定义的方法与父类中的方法具有相同的方法名字,以及相同的参数表 ...

  4. Java - 为什么不能根据返回类型来区分重载?

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 因为调用时不能指定返回类型信息,编译器不知道你要调用 ...

  5. java中的重写与重载_java中的重写与重载

    1.重写 重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的:若 ...

  6. 运算符重载 返回类型说明符后加_Java学习:运算符的使用与注意事项

    运算符的使用与注意事项 四则运算当中的加号"+"有常见的三种用法: 对于数值来,那就是加法. 对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算.char ...

  7. java重载和重写的区别

    1.首先是含义不同 1)方法重载是在同一个类中,声明多个同名方法,通过参数列表来区分不同的方法,与参数列表的数量.类型和顺序有关,与修饰符和返回值类型以及抛出异常类型无关 2)方法重写(方法覆盖)的前 ...

  8. java重载与重写的区别你懂了吗

    目录: 1.重载 2.重写 1.重载 (1) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. (2)重载的特点: 1.方法名要一样,但是参数类型或个 ...

  9. java 可以重载等于号码_Java面试之Java基础4——重载与重写的区别

    目录 重载与重写的概念 重载与重写的区别 重载与重写的总结 构造器是否能被重写override 为什么函数不能根据返回类型来区分重载 重载与重写的概念 重载:同样一个方法可以根据输入参数列表的不同,做 ...

最新文章

  1. 五轴高性能服务器,GF加工方案全新的五轴高性能加工中心MILL P 500 U
  2. 趣题:寻找出现了奇数次的数
  3. 运筹学(最优化理论)学习笔记 | 共轭梯度法
  4. hdu 3948(后缀数组+RMQ)
  5. 小型项目服务器要多少,小型服务器需要什么配置
  6. 灰色关联分析_灰色关联分析模型研究综述
  7. linux 配置路由时via,详解Linux系统中配置静态路由的方法
  8. C++传递数组给函数
  9. python列表生成式和map效率_Python列表生成式12个小功能,你常用哪几个?
  10. python learning2.py
  11. altium 快速设置网络_通过加载CAD“快速选择”插件,可以很大的提高绘图效率...
  12. 用python实现文件加密功能
  13. yii2-jui的基本使用
  14. IE浏览器在地址栏针对param直接输入中文导致乱码的解决方案
  15. PostgreSQL-Docker创建PostgreSQL数据库并导入矢量数据
  16. Eclipes下载安装
  17. IDEA快速移动光标到行首或行尾;
  18. 浅析swift optional
  19. python循环输出1到10_用Python编写一个程序,使用for循环输出0~10之间的整数
  20. Linux内核源码下载方式

热门文章

  1. Data Exfiltration via Blind OS Command Injection
  2. mine layer(2008 World Final C)
  3. 为vsftpd添加虚拟用户的脚本
  4. openstack nova 源码分析4-nova目录下的driver.py
  5. .net中调用windows performance记录性能信息
  6. Linux下Apache与Tomcat的完全分布式集群配置(负载均衡)
  7. Cyborg Genes UVA - 10723
  8. 前端工作面试问题(上)---转
  9. 树形DP(简单题)(Y HDU4705)
  10. yarn当中各个主要组件的作用及调度器