重载:两同一不同,同一个类中方法名相同,参数列表不同。至于方法其他的部分与方法重载没有任何关系。 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")调用程序不知道去执行哪一个方法。 重写:两同两小一大, “两同”即方法名相同,形参列表相同; “两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等; “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。( 比如 父类方法是用 protected 修饰的 子类就只能用 public 修饰 而不能用private 修饰) 两小”是不包括基本类型的,例如byte和int他们虽然有一定联系,但是他们不是父子关系,原因是没有继承关系。 返回值类型比父类的要小,这个返回值一定是有父子关系才行的,基本类型之间没有父子关系。 重写意味着子类重写了一个和父类一样的方法,将父类的方法给覆盖掉了。 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; } } 引用网址http://bbs.csdn.net/topics/390369645?page=1 https://yq.aliyun.com/articles/4491 |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |