对于java的方法重载是只考虑方法名与参数列表,构成方法重构载的条件是:方法名必须相同,参数列表必须不同;
细节一:只考虑方法名与参数列表,与访问修饰词和返回类型无关,只要是方法名相同与参数列表不相同的情况下也是构成重载,例如:
public static void main(String[] args) {
Person person = new Person();
person.say("小明");
person.say(15);
double a=person.say(65.3);
}
}
class Person{
public void say(String name){
System.out.println("我的名字是:"+name);
}
public void say(int age){
System.out.println("我的年龄是:"+age);
}
public double say(double salary){
System.out.println("我的金额是:"+salary);
return salary;
}
}
运行结果我的名字是:小明
我的年龄是:15
我的金额是:65.3
细节二:在继承关系中只要方法名相同参数列表不同,也是构成重载的
public static void main(String[] args) {
xiao x = new xiao();
x.say("小民");
x.say(32);
}
}
class Person{
public void say(String name){
System.out.println("我的名字是:"+name);
}
}
class xiao extends Person{
public void say(int age){
System.out.println("我的年龄是:"+age);
}
}
总结:方法重载是实现同一方法可以传入不同参数,实现不同功能的作用,不论是在继承关系还是同类关系中,只需要关系方法名是否相同,参数列表是否不同;
java中的方法重写是只针对于继承关系的,子类继承父类的本质是子类复制了父类的属性与方法,
细节一:子类方法名与父类方法名相同,参数列表也必须相同;
public static void main(String[] args) {
xiao x = new xiao();
x.say("小民");
}
}
class Person{
public void say(String name){
System.out.println("我的名字是:"+name);
}
}
class xiao extends Person{
public void say(String name){
System.out.println("aaa");
}
}
此时对于子类对象来说,只有子类中的say方法而找不到父类的say方法
细节二:子类方法的返回值只能是父类方法返回值的子类或者与父类返回值相同
细节三:子类方法的访问修饰词只能等同或者扩大,例如父类say方法是public 则子类不能将其方法的访问范围缩小,也只能是public
总结:方法重载是用于同一方法传入不同参数实现不同功能而存在,只需要注意方法名相同参数列表不同;方法重写是在继承关系下,子类方法想要拥有于父类同名的方法,但不想使用父类的功能,则利用方法名相同参数列表相同的方式来实现自己的功能,需要注意的是如果是方法重载,那么对于访问修饰词的要求是只大不小,对返回值的要求是父类方法返回值的子类。