重载:
构造函数的名字和它从属的类的名字相同。
对象和方法的名字有时候会面临重载的需要,例如类的构造函数的引入,因为有时候会需要使用几种不同的方法来创建对象,例如既能用标准的无参数方法来初始化,又可以使用带String类型的参数的方法来读取磁盘上的配置文件来初始化,这就需要建立两个构造函数,它们的名字是相同的,于是就牵出了方法重载的要求。
如:
class Plant{
int height=0;
Plant(){
System.out.println("Plant a seed.");
height=0;
}
Plant(int i){
System.out.println("Plant a tree that's "+i+" feet tall.");
height=i;
}
void detail(){
System.out.println("The tree is "+height+" feet tall.");
}
void detail(String s){
System.out.println(s+": The tree is "+height+" feet tall.");
}
}
class OverloadingTest{
public static void main(String[] args){
new Plant();
for(int i=0;i<3;i++){
Plant tree=new Plant(i);
tree.detail();
tree.detail("Overloaded method");
}
}
}
区分重载的方法:如果出现多个重载,那么Java将以不同的参数类型列表来区分不同的重载。
如:void Plant(String s , int i)与void Plant(int i , String s)就是不同的重载。
不能使用返回值判断重载
可以想像如果根据不同的返回值来判断不同的重载也许可行,但是如果调用方法不是为了获得其返回值,而是为了得到其“副作用”,那么根据返回值类型来判断重载就会遇到麻烦。
即如果你这样定义一个重载:
void f() {}
int f() {}
在关心返回值的情况下,使用int x = f()可以正确调用下面那个方法,但是如果不关心返回值,直接使用 f() 的话编译器就无法正确判断你究竟想调用哪个方法。
重写:
父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
重写注意点:
1、必须是子类继承父类,在子类中重写父类的方法
2、方法名、返回值类型、参数个数、参数类型都必须相同,抛出异常的允许情况也必须相同,一句话,只有方法里面的功能语句可以不同。
3.、子类重写父类的方法的访问修饰符不能低于父类。
|