问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java什么是方法重写的语法规则?

发布网友 发布时间:2022-04-23 00:00

我来回答

4个回答

热心网友 时间:2023-10-09 01:31

一、方法的重写。
1、重写只能出现在继承关系之中。当一个类继承它的父类方法时,都有机会重写该父类的方法。一个特例是父类的方法被标识为final。重写的主要优点是能够定义某个子类型特有的行为。

class Animal {
public void
eat(){

System.out.println ("Animal is eating.");

}
}

class Horse extends Animal{

public void eat(){

System.out.println ("Horse is
eating.");
}

}

2、对于从父类继承来的抽象方法,要么在子类用重写的方式设计该方法,要么把子类也标识为抽象的。所以抽象方法可以说是必须要被重写的方法。

3、重写的意义。
重写方法可以实现多态,用父类的引用来操纵子类对象,但是在实际运行中对象将运行其自己特有的方法。

public class Test {
public static
void main (String[] args) {

Animal h = new Horse();

h.eat();

}

}

class Animal {

public void eat(){

System.out.println ("Animal is
eating.");
}

}

class Horse extends
Animal{
public void
eat(){

System.out.println ("Horse is eating.");

}
public void
buck(){
}

}

一个原则是:使用了什么引用,编译器就会只调用引用类所拥有的方法。如果调用子类特有的方法,如上例的h.buck();
编译器会抱怨的。也就是说,编译器只看引用类型,而不是对象类型。

4、重写方法的规则。
若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求!

重写规则之一:重写方法不能比被重写方法*有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。)
比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们的机会。出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的。

重写规则之二:参数列表必须与被重写方法的相同。
重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。

重写规则之三:返回类型必须与被重写方法的返回类型相同。
父类方法A:void
eat(){} 子类方法B:int eat(){} 两者虽然参数相同,可是返回类型不同,所以不是重写。
父类方法A:int
eat(){} 子类方法B:long eat(){}
返回类型虽然兼容父类,但是不同就是不同,所以不是重写。

重写规则之四:重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
例:

import java.io.*;
public class Test
{
public static void main (String[]
args) {
Animal h =
new Horse();
try
{

h.eat();

}

catch (Exception e) {

}

}
}

class Animal
{
public void eat() throws
Exception{

System.out.println ("Animal is eating.");

throw new
Exception();
}

}

class Horse extends
Animal{
public void eat() throws
IOException{

System.out.println ("Horse is eating.");

throw new
IOException();
}

}
这个例子中,父类抛出了检查异常Exception,子类抛出的IOException是Exception的子类,也即是比被重写的方法抛出了更有限的异常,这是可以的。如果反过来,父类抛出IOException,子类抛出更为宽泛的Exception,那么不会通过编译的。
注意:这种*只是针对检查异常,至于运行时异常RuntimeException及其子类不再这个*之中。

重写规则之五:不能重写被标识为final的方法。

重写规则之六:如果一个方法不能被继承,则不能重写它。
比较典型的就是父类的private方法。下例会产生一个有趣的现象。

public class Test {
public static
void main (String[] args) {

//Animal h = new Horse();

Horse h = new
Horse();

h.eat();
}

}

class Animal {

private void eat(){

System.out.println ("Animal is
eating.");
}

}

class Horse extends
Animal{
public void
eat(){

System.out.println ("Horse is eating.");

}

}
这段代码是能通过编译的。表面上看来违反了第六条规则,但实际上那是一点巧合。Animal类的eat()方法不能被继承,因此Horse类中的eat()方法是一个全新的方法,不是重写也不是重载,只是一个只属于Horse类的全新的方法!这点让很多人迷惑了,但是也不是那么难以理解。
main()方法如果是这样:

Animal h = new Horse();
//Horse h = new
Horse();

h.eat();
编译器会报错,为什么呢?Horse类的eat()方法是public的啊!应该可以调用啊!请牢记,多态只看父类引用的方法,而不看子类对象的方法!

热心网友 时间:2023-10-09 01:31

/**
* 动物类
* @author tanqiao
*
*/
public class Animal {
public String eat() throws RuntimeException{//抛出运行时异常,修饰为public,无参数
return "食物";
}
}

public class Cat extends Animal{
@Override
public String eat() {
//这就是方法重写了,发生在继承关系中,必须满足与父类的该方法返回值类型,方法名和参数列表一致,而且访问不能比父类更严格,抛出的异常不能比父类更大(throws Exception就会报错)
return "吃鱼";
}

/**
* 重载,就是你说的复写吧
* @param s 带有了参数,修改了访问修饰,修改了返回值
* @return 结论:只要满足名字一样就是重载,与其他的无关
*/
void eat(String s) {//同一个类中

}
}

热心网友 时间:2023-10-09 01:32

java方法的重写 是发生在继承关系里头的,
比如 子类继承父类;
那么它有如下规则:
规则1: 子类的方法的名称及参数必须和父类方法的名称相同

规则2: 子类的方法的返回值类型必须和父类方法的返回值类型相同

规则3: 子类方法的访问权限不能小于父类方法的访问权限;例如:父类的访问权限是protected, 子类不能是private;只能是同级(protected)或者更高级(public)

规则4: 子类方法抛出的异常个数与父类方法的异常个数一致,且子类异常要比父类异常要小;例如:父类异常为Exception ,子类不能是classNotFoundException

热心网友 时间:2023-10-09 01:32

java方法重写语法法则:
A、重写规则之一:
重写方法不能比被重写方法*有更严格的访问级别。
(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限。) B、重写规则之二:
参数列表必须与被重写方法的相同。
重写有个孪生的弟弟叫重载,也就是后面要出场的。如果子类方法的参数与父类对应的方法不同,那么就是你认错人了,那是重载,不是重写。
C、重写规则之三:
返回类型必须与被重写方法的返回类型相同。
D、重写规则之四:
重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。但是可以抛出更少,更有限或者不抛出异常。
E、重写规则之五:
不能重写被标识为final的方法。
F、重写规则之六:
如果一个方法不能被继承,则不能重写它。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的tif灰度图,输出成8.0版本,就变成四色了,怎么解决? 华为matepad 10.4英寸平板参数 微博被禁言 B站怎么把别人移出黑名单 B站恢复黑名单好友步骤一览 B站怎么把别人移出黑名单 把别人移出黑名单方法介绍 顾村幼儿园哪个好 宝山顾村幼儿园有哪些 顾村私立有哪些幼儿园 顾村有哪些幼儿园 宝山幼儿园排名前十名 果皮和种皮怎么区别? java中重载和重写的区别是什么? 在WORD里怎么打印啊? word中怎么在□打√? 怎么在word里打√ 怎么在百度地图底图上显示店铺? 百度地图商户怎么标注? 了解怎样才能在地图上标注商铺名称? 怎样在地图上标注自己的店铺? 为什么用了乐施洁医用功能性敷料后每晚都流出很多液体流出,也不清楚是药物流出还是体液? 江门乐8小城中途可以出去再进去吗? 医用磁疗护膝药监局批号多少?是那个厂产出的 什么是医用腕带?有什么样的作用? 今天乐八月份在老家做了痤疮,肛裂手术,现在*又裂了,这几天还出现便血,现在我应该什么做 BIO QUEEN医用冷敷贴说的传承LOHAS精神是什么意思? 乐旅一次性医用口罩厂家一个多少钱? 河南乐八酒店管理有限公司怎么样? 上海虹桥乐翔医用试剂技术有限公司怎么样? 乐八途旅行社是正规的旅行社吗? 湖南乐八途国际旅行社,这家公司怎么样?我朋友刚报了他们家的团? java重写 果皮和种皮的区别 java中重写方法应遵循哪些规则 种皮和果皮的区别 java语言中的重写、重载、继承? 怎么区分果实和种子? 如何区分种子和果实? java中的方法重写怎么写啊,什么个意思 怎样区分种皮和果皮?看图片区分,看外形的区分。求答案! java中什么是重写的语法规则? 苹果手机如何恢复已删除的聊天记录? 果皮和种皮有什么区别 java重写已定义好的类中的方法 果皮和种皮有区别吗? JAVA中重写、重载、重构的区别?? 苹果手机如何恢复某个人聊天记录? 植物的种皮和果皮各由什么发育而来 种子和果实的差别是什么 七年级上册生物中果皮和种皮有什么区别 java中的方法重写 java中重写、覆盖、覆写是不是一个意思?