方法重载
其实区分重载,有一个很简便的方法,那就是每一个方法有一个独一无二的参数列表。
public class Son extends Father{ int fff(){ return 0; } String fff(int x,String y){ return ""; } void fff(String y,int x){}; public static void main(String[] args) { Son son=new Son(); } }
由以上代码可以看到:
1、参数个数不同可以区分
2、参数的顺序不同可以区分。
注意;返回值类型不同不能区分。
为什么返回值类型不同不能区分呢?这是因为有时候我们定义的方法,我们只是想要简单地去调用,而不想去获取他的返回值。
比如:在调用fff()时,只需要调用fff()或者是fff(1,"数据")而不去获取他的返回值。这样jvm是无法区分的。
方法重写
先看一下重写的概念:
1、在子类中可以根据需要对从基类中继承来的方法进行重写。
2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。(注:返回值可以为父类中返回值的子类型.参数若为子类,则不是重写是重载)
3、重写方法不能使用比被重写的方法更严格的访问权限。
4、重写方法不能声明抛出比被重写方法范围更大的异常类型。
总结:重写是子类对所继承父类相同方法的一种更改,这个更改需要遵循格式按照父类的格式,访问权限,抛出异常等等,都在父类方法控制范围内,内部具体实现可以实现不同的效果。
通俗一点来说:重写就是对父类的的同一个方法的改写,但是别人怎么知道你这是重写,不是添加的新方法?这就要求格式必须跟父类相同,别人一看,呀,他俩长的一模一样(指的上面2,3,4规则),肯定是重新写了,就是重写。
看一个例子:
定义父类:
public class Father extends Grandpa { String add(int a,int b){ int c=a+b; return ""+c; } }
定义子类
public class Son extends Father{ String add(int a,int b){ int c=a+b; return ""+c; } public static void main(String[] args) { Son son=new Son(); } }
这样就完成了方法的重写。