大家好,我是小新,我来为大家解答以上问题。重写和重载都属于面向对象的特征,重写和重载很多人还不知道,现在让我们一起来看看吧!
1、
1、重写能够在需要新的子类特有行为时重新在子类中定义方法。
2、重写方法的规则:
3、● 参数列表必须完全与被重写的方法相同。
4、● 返回类型必须完全与被重写的方法返回类型相同。
5、● 访问级别的限制性(private,public等)一定不能比被重写方法的强。
6、● 重写方法一定不能抛出新的检查异常或比被重载方法声明的检查异常更广的检查异常。
7、● 重写方法能够抛出更少或更有限的异常
8、● 不能重写被标识为final的方法
9、● 如果不能继承一个方法,则不能重写它。
10、重载的方法和构造函数(构造函数只能被重载)使用具有不同参数列表的相同方法名称(或构造函数)。
11、重载方法的规则:
12、● 被重载的方法必须改变参数列表。
13、● 被重载的方法可以改变参数类型。
14、● 被重载的方法可以改变访问修饰符。
15、● 被重载的方法可以声明新的或更广的检查异常。
16、● 方法可以在一个类中或一个子类中重载。
17、最后一个例子:
18、public class Person{
19、public void who(){
20、System.out.println("I am a person");
21、}
22、}
23、public class JJ extends Person{
24、public void who(){
25、System.out.println("I am JJ");
26、}
27、public void who(String s){
28、System.out.println("I am " + s);
29、}
30、}
31、---------------------------------------------------------------
32、 方法调用代码 | 结果
33、---------------------------------------------------------------
34、Person p = new Person(); | I am a person
35、p.who(); |
36、---------------------------------------------------------------
37、JJ j = new JJ(); | I am JJ
38、j.who(); |
39、---------------------------------------------------------------
40、Person p = new JJ(); | I am JJ
41、p.who(); |
42、---------------------------------------------------------------
43、JJ j = new JJ(); | I am Pandajj
44、j.who("PandaJJ"); | 调用重载方法
45、---------------------------------------------------------------
46、Person p = new Person(); | 编译错误
47、p.who("JJ"); |
48、---------------------------------------------------------------
49、Person p = new JJ(); | 编译错误
50、p.who("JJ"); |
51、---------------------------------------------------------------
52、注:最后两个调用方法代码会产生编译错误,是因为编译器在编译时候,只看到引用类型,
53、 发现Person没有带参数的who()方法,编译器并不能意识到实际对象在运行的时候可能
54、 是它的子类JJ的对象。
本文到此讲解完毕了,希望对大家有帮助。