子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类

简介:
Overload译为重载;Override译为重写或者覆盖; 

Overload讨论: 
Java中同一个类不可以有两个相同的方法(方法名、参数类型、参数个数和参数位置都 

相同)。但可以有方法名相同,参数不同(参数类型、参数个数和参数位置不相同)的方法。这 

种相同的方法名,参数不同的方法称为重载。 
public class Test { 
public void fn(String name) {} 
public void fn(int age) {} 
public void fn(String name, int age) {} 
public void fn(int age, String name) {} 

这个相信大家都知道,那么不同返回类型或者抛出的异常声明可以重载吗?答案是不可 

以,那么为什么不可以呢? 
public class Test { 
public void fn(String name) {} 
public String fn(String name) { //Error 
return null; 

public void fn(String name) throws Exception {} //Error 

因为返回类型和抛出的异常声明是在执行完该方法(运行时)才知道的,所以fn 

("Bruce")调用程序不知道去执行哪一个方法。 

Override讨论: 
重写意味着子类重写了一个和父类一样的方法,将父类的方法给覆盖掉了。 
class Parent { 
public void fn() { 
int i = 1 + 1; 


class Son extends Parent { 
public void fn() { 
int i = 8 - 3; 


那么子类方法返回类型或者抛出的异常声明和父类不同是否可以?不可以,Java编译要 

求子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类。 
class Parent { 
public void fn() throws RuntimeException { 
int i = 1 + 1; 


class Son1 extends Parent { 
public void fn() { 
int i = 8 - 3; 


//NullPointerException是RuntimeException子类,所以可以 
class Son2 extends Parent { 
public void fn() throws NullPointerException { 
int i = 8 - 3; 


//RuntimeException和NullPointerException都可以上塑转型为RuntimeException,所以可以 
class Son3 extends Parent { 
public void fn() throws RuntimeException, NullPointerException { 
int i = 8 - 3; 



//Exception是RuntimeException的父类,大于RuntimeException类,所以不可以 
class Son4 extends Parent { //Error 
public void fn() throws Exception { 
int i = 8 - 3; 

}



目录
相关文章
|
3月前
如何处理构造函数中参数的默认值?
设置合理的默认值可以增加代码的灵活性和易用性,同时减少在调用构造函数时必须传递所有参数的要求。在处理默认值时,要确保其合理性和一致性,避免出现意外的行为或错误。你还想了解关于构造函数的其他方面吗?比如参数的验证等
113 58
|
9月前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
79 0
|
Java 程序员 PHP
C++的对象与类的含义
C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: #include <stdio.h> //定义结构体 Student struct Student{ //结构体包含的成员变量 char *name; int age; float score; }; //显示结构体的成员变量 void displ
|
Java 编译器
重载的方法能否根据返回类型进行区分?
重载的方法不能根据返回类型进行区分。方法的重载是基于方法名称和参数列表来进行区分的,与返回类型无关。这是因为在Java中,编译器在确定要调用哪个重载方法时,仅根据传递给方法的参数来进行决策。
401 0
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
第五周学习java 继承 在子类父类中有相同参数,子类继承分类后如何进行调用,判断创建的对象属性哪个类
|
JavaScript 前端开发
证明函数是对象的特殊子类型和函数的对象属性
证明函数是对象的特殊子类型和函数的对象属性
|
前端开发 Java 开发者
你还在用 if 判断参数是否在枚举范围内吗?我已经用上注解了。
通过自定义注解来实现参数值的枚举范围校验,适用于场景就是当一个 int, String 值是在一个枚举的范围内,通过 Spring MVC 中的参数校验拓展来实现规范的参数校验,保证用户传入参数的有效性。以减少代码中的 if ... else 逻辑。
604 0
|
C语言 Android开发 C++
【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
205 0
接口类型的数组对象的逐个赋值与调用方法(开关)
问:把对象装数组分几步? 答:第一步把数组声明出来(new),第二步把对象装进去(=),第三步把数组遍历出来(for, for each)将编程看作是一门艺术,而不单单是个技术。 敲打的英文字符是我的黑白琴键, 思维图纸画出的是我编写的五线谱。 当美妙的华章响起,现实通往二进制的大门即将被打开。
994 0
|
Java 编译器 人工智能
你知道Java方法能定义多少个参数吗?
一个Java方法,最多能定义多少参数呢?我知道这是一个很无聊的问题,即使能定义一万个,十万个,谁又会真的去这么做呢。但是作为一个Coder,最重要的不就是好奇心吗,没有好奇心,和一条咸鱼又有什么区别呢?
1097 0

热门文章

最新文章