| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> JAVA重载和重写(深入理解) -> 正文阅读 |
|
[Java知识库]JAVA重载和重写(深入理解) |
重载1.构造器的重载因为构造器的名字必须与类名相同,所以同一个类的所有构造器名肯定相同,构成重载;为了让系统能区分不同的构造器,多个构造器的参数列表必须不同。
2.方法的重载(overload)
两同一不同”:同一个类、相同方法名 ???????????????????????参数列表不同:参数个数不同,参数类型不同 2.举例: Arrays类中重载的sort() / binarySearch() 3.判断是否重载: ????????跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
4.在通过对象调用方法时,如何确定某一个指定的方法 : ????????方法名------>参数列表 重写为什么要重写:父类的功能无法满足子类的需求 方法重写的前提:必须要存在继承的关系! 应用:重写以后,当创建子类对象以后,通过子类对象调用子父类的同名参数的方法时,实际执行的时子类重写父类的方法 重写的规定:方法的声明:权限修饰符 返回值类型 方法名(形参列表) throws 异常的类型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//方法体 ???????????????????????????????????????????} 约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法 A. 子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同 B. 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符 ? ? ?>特殊情况:子类不能重写父类中声明为private权限的方法 C. 返回值类型: ? ? ?>父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void ? ? ?>父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A的子类
? ? ?>父类被重写的方法的返回值类型是基本数据类型(比如:double).则子类重写的方法的返回值类型必须是相同的(double) D.子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型.(可以抛出异常类型更少、异常类型更小、不抛出异常) 子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)。 注意:A? 父类的静态方法不能被子类覆盖为非静态方法。 B? 父类的静态方法不能被子类覆盖为静态方法。(这两点与上面的那句话表达的是一个意思) E.静态方法不能被重写 原因:重写依赖于类的实例,而静态方法和类实例并没有什么关系。而且静态方法和类实例并没有什么关系。而且静态方法在编译时就已经确定,而方法重写是在运行时确定的(动态绑定)。(也可以说java多态体现在运行时、而static在编译时、与之相悖) 《JAVA编程思想》中多次的提到:方法是静态的、他的行为就不具有多态性。静态方法是与类、而非单个对象相关联的。 区分方法的重载和重写
重写:表现为多态性。 从编译和运行的角度来看: 重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数列表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。他们的调用地址在编译期间就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。 所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定”; 而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定”; 引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态。” |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 1:56:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |