重载(overload):方法名称一样,参数列表【不一样】。
如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写(override)
概念:
子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。
声明不变,重新实现
特点:
创建的是子类对象,则优先用子类方法。
重写(override):方法的名称一样,参数列表【也一样】。也叫覆盖、复写
注意事项
-
子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样
@override:写在方法前面,用来检测是不是有效的正确覆盖重写
这个注释就算不写,只要满足要求,也是正确的覆盖重写
-
子方法的返回值必须【小于等于】父方法的返回值范围。
小扩展提示:java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是object的子类
-
子类方法的权限必须【大于等于】父类方法的权限修饰符
-
小扩展提示:public > protected > (defoult) 什么都不写>private
备注:(default)不是关键字default,而是什么都不写,留空。
/*
重写(override):方法的名称一样,参数列表【也一样】。也叫覆盖、复写
*/
public class Fu{
public void method(){
System.out.println("Fu show");
}
}
public class Zi extends Fu{
public void method(){
System.out.println("Zi show");
}
}
public static void main(String[] args){
Zi zi = new Zi();
zi.method();//zi show
}
/*
重载(overload):方法名称一样,参数列表【不一样】。
*/
public void bark(){
System.out.println("woof");
}
public void bark(int num){
for(int i = 0;i<num;i++){
System.out.println("woof");
}
}
小结:
重写(override):方法名参数都一样。
重载(overload):方法名相同,参数不同。
设计原则:
对于已经投入使用的类,尽量不要进行修改。推荐定义一个新的类,来重复利用其中的共性内容,并且添加改动新内容
子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从 而进行扩展增强。比如新的手机增加来电显示头像的功能
代码如下:
//父类
class Phone{
public void call(){
System.out.println("打电话");
}
public void send(){
System.out.println("发短信");
}
public void show(){
System.out.println("现实号码");
}
}
//子类
class NewPhone{
@Override
public void show(){
super.show();
System.out.println("显示号码");
System.out.println("显示头像");
}
}
//测试类
public static void main(String[] args){
Phone phone = new Phone();
phone.call();//打电话
phone.send();//发短信
phone.show();//显示号码
NewPhone newphone = new NewPhone();
newphone.call();//打电话
newphone.send();//发短信
newphone.show();//显示号码 显示号码 显示头像
}
访问特点:
继承关系中,父子构造方法的访问特点
-
子类构造方法中有一个默认隐含的“super();”方法调用,所有一定是先调用的父类构造,然后执行子类的构造。
-
子类构造可以通过super关键字来调用父类重载结构。
-
super的父类构造调用,必须是子类构造方法的第一个语句。
不能一个子类构造调用多次super构造。
总结:
子类必须调用父类构造方法,不写则赠送super();写了则用指定的super调用,super只能有一个,还必须是第一个。