java 非法重载_JAVA中重写和重载区别
重写和重载区别
重写方法的规则如下:
参数列表:必须与被重写方法的参数列表完全匹配。
返回类型:必须与超类中被重写的方法中声明的返回类型或子类型完全相同
访问级别:一定不能比被重写方法强,可以比被重写方法的弱。
非检查异常:重写方法可以抛出任何非检查的异常,无论被重写方法是否声明了该异常。
检查异常:重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常
不能重写标志为final,static的方法
重载方法的规则:
参数列表:被重载的方法必须改变参数列表。
返回类型:可以改变返回类型。
修饰符:可以改变修饰符
异常:可以声明新的或者更广泛的异常。
class Animal {
public void eat(){
}
}
以下列出对于Animal的eat方法各种重写重载实例,根据以上列出的规则,判断其是否合法(以下的方法都属于Animal的子类Horse的方法):
private void eat(){} 不能通过编译,非法重写,访问修饰符限制性变强;不属于重载,因为参数列表没有发生改变
public void eat() throw RuntimeException{} 能通过编译,属于重写,重写方法可以抛出任何非检查异常。
public void eat() throw IOException{} 不能通过编译,非法重写,重写方法一定不能抛出新的检查异常,或比被重写方法声明的检查异常更广的检查异常;不属于重载,参数列表必须发生变化才属于重载
public void eat(String food){} 能通过编译,不是重写;合法重载,因为参数列表发生改变了。
public String eat(){} 不能通过编译,不是重写,因为其返回类型;不是重载,因为参数列表没有发生改变。
public String eat(int n){} 可以通过编译,不是重写;是重载,首先参数列表必须发生变化,返回类型可以发生改变。
对父类被重写的方法做一个变动:
class Animal {
public Animal eat() throws IOException{
return null;
}
}
public Animal eat(){return null;} 可以通过编译,合法重写,可以不抛出异常,只要不抛出新的异常或更广泛的异常就可以。
public Animal eat() throws FileNotFoundException{return null;} 可以通过编译,是重写,属于子类的非检查异常。
public Animal eat() throws Exception{} 不可以通过编译,非法重写,抛出了更广泛的异常。
public Horse eat() {} 可以通过编译,是重写,因为返回类型可以是被重写的返回类型的子类。
重载(Overloading)
方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。、
重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
重写(Overriding)
父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
子类函数的访问修饰权限不能少于父类的;
总结:重载和重写(覆盖)
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法
被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和父类相同,那么子类的返回值类型必须和父类的相同;如果在一个类中定义了多个同
名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。
资料
java 非法重载_JAVA中重写和重载区别相关推荐
- java中函数的重载_Java中函数的重载
函数的重载 1.同一个类 2.同名函数 3.参数个数不同或者参数类型不同 4.java是严谨性语言,如果函数出现的调用的不确定性,会编译失败. public static int add(int a, ...
- java构造函数的重载_Java中的构造函数重载 - Break易站
Java 构造函数 Java中的构造函数重载 除了重载方法外,我们还可以在java中重载构造函数.基于新执行时指定的参数调用重载的构造函数. 我们什么时候需要构造函数重载? 有时候需要用不同的方式初始 ...
- java 两个运算符重载_Java中的操作符重载
0.Java操作符重载 Java中我们可以执行如下语句: String fullName = "hongliang "+"cao"; System.out.pr ...
- Java中重写和重载有哪些区别
其实java中的重写和重载没有任何关系,只是因为都有个重字,有些小白就会对这两个概念产生混淆,所以也就有很多面试官喜欢问这个题目了. Java中方法的重载和重写都是实现多态的方式,区别在于前者实现的是 ...
- java方法重载和重载方法_Java中的方法重载
java方法重载和重载方法 The concept of Method Overloading in Java is where a class can have multiple methods w ...
- java 继承 重载_java – 使用继承的重载方法
My question is, why isn't ClassB's method being used? 不对.使用的方法是ClassB的方法,它从ClassA继承. 我认为这里的混乱背后的主要原因 ...
- java thread join()_Java中Thread.join()的使用方法
概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...
- java+map申明_Java中两种HashMap申明方式区别?
Map是HashMap的父类,第一种声明方式是:父类的引用指向子类的对象,是多态的一种表现形式:第二种是:使用本身引用.举个例子: 第一种声明方式是实现了多态,多态后就可以写出一段所有子类都通用的代码 ...
- java wait 参数_java中wait()和join()方法的区别是什么
java中wait()和join()方法的区别是:存在不同的java包中:wait()方法用于线程间通信,它所施加的等待状态的线程可以被启动:join()方法用于在多个线程之间添加排序,它所施加的等待 ...
最新文章
- 转:strcat与strcpy与strcmp与strlen
- 10件开发者和老板都要知道的HTML5的那些事
- 【原创】项目管理得失经验总结
- HDU1020 Encoding
- 学习React的一知半解
- LoRaWAN的四大优势及适用领域
- Java(TM) platform SE binary 占用cpu过高
- 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)
- 马云曾卖鲜花,柳传志卖冰箱!摆摊吧,程序员!
- Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记 3 —— 数据获取与清洗
- 黑域,黑阈 Permission denied
- 死锁——哲学家就餐问题
- 9:参数校验-Java Spring
- 求生之路显示服务器列表指令,求生之路2指令大全 所有可用指令一览_游戏狗
- C盘空间不足?扩充C盘
- 【区间 dp】A005_LC_工作计划的最低难度(暴搜 / dp)
- (九)JMH的详细使用,以及压测dubbo
- 连接数据库失败提示hba.conf不符合的处理方法
- 安卓JSON格式化工具
- 后端SMM+前端Vue示例项目开发总结