简单记录一下Java的重写与重载(/ω\)。
重写
Java重写是在子类中定义方法,其与父类某方法的命名、参数列表和返回类型完全相同。重写的好处在于子类可以根据需要,定义特定于自己的方法。
重写的规则
- 参数列表(参数个数、参数顺序)、返回值类型必须与被重写的方法完全相同;
- 访问级别不能比父类中被重写的方法有更严格的限制;
- 父类的方法只能被其子类重写;
- 声明为
final
的方法不能被重写;
- 声明为
static
的方法不能被重写,但能被再次声明;
- 当子类和父类在同一个包中时,子类可以重写父类除了声明为
private
和final
外的所有方法;
- 当子类和父类不在同一个包中时,子类只能重写父类声明为
public
和protected
的方法;
- 如果不能继承一个方法,则不能重写这个方法;
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常;但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以;
- 构造方法不能被重写。
举个栗子
class demo0 { public int tags() { System.out.println("demo0"); return 0; } } class demo1 extends demo0 { public int tags() { System.out.println("demo1"); return 1; } } public class Override0 { public static void main(String[] args) { demo0 d0=new demo0(); demo1 d1=new demo1(); d0.tags(); d1.tags(); } }
|
运行结果:
关键字super
当需要在子类中调用父类的被重写的方法时,就要使用关键字super
。
class demo0 { public void tags() { System.out.println("demo0"); } } class demo1 extends demo0 { public void tags() { System.out.println("demo1"); super.tags(); } } public class Override1 { public static void main(String[] args) { demo1 d1=new demo1(); d1.tags(); } }
|
运行结果:
重载
Java重载就是使类以相同的方法处理不同的参数,其在一个类中,方法名字相同,而参数列表不同,返回值可以相同也可不同。
重载的规则
- 方法的参数列表(参数个数、参数顺序)必须不同;
- 方法的返回值类型可以相同也可不同;
- 方法可以改变访问修饰符;
- 方法能在同一个类或在一个子类中被重载;
- 被重载的方法可以声明新的或更广的检查异常;
- 不能以返回值类型作为重载的标准。
举个栗子
public class Overload { public int demo() { System.out.println("demo0"); return 0; } public void demo(int x) { System.out.println("demo1"); } public String demo(int x,String y) { System.out.println("demo2"); return "test0"; } public String demo(String y,int x) { System.out.println("demo3"); return "test1"; } public static void main(String[] args) { Overload O=new Overload(); O.demo(); O.demo(1); System.out.println(O.demo(1,"NIMITIZ")); System.out.println(O.demo("NIMITIZ",1)); } }
|
运行结果:
demo0 demo1 demo2 test0 demo3 test1
|
总结
|
重写 |
重载 |
参数列表 |
一定不能修改 |
必须修改 |
返回值类型 |
一定不能修改 |
可以修改 |
异常 |
可以减少或删除,一定不能出现新的或更广的异常 |
可以修改 |
访问级别 |
可以降低限制,但一定不能做更严格的限制 |
可以修改 |
如有错误,请在评论区留言,非常感谢(′▽`〃)。
本文整理自
Java 重写(Override)与重载(Overload)