☆方法重写-override
子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。
使用特点:
如果方法名不同,就调用对应的方法
如果方法名相同,最终使用的是子类自己的
方法重写的应用:复用方法
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。
这样即沿袭了父类的功能,又定义了子类特有的内容。
说的就是你:模板模式。
/*
方法重写:子类中出现了和父类中方法声明一模一样的方法。
方法重载:同名不同参,与返回值无关
本类中出现的方法名一样,参数列表不同的方法,与返回值无关。
子类对象调用方法的时候:
先找子类本身,再找父类。
方法重写的应用:
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。
这样,即沿袭了父类的功能,又定义了子类特有的内容。
案例:
A:定义一个手机类。
B:通过研究,我发明了一个新手机,这个手机的作用是在打完电话后,可以听天气预报。
按照我们基本的设计,我们把代码给写出来了。
但是呢?我们又发现新手机应该是手机,所以,它应该继承自手机。
其实这个时候的设计,并不是最好的。
因为手机打电话功能,是手机本身就具备的最基本的功能。
所以,我的新手机是不用在提供这个功能的。
但是,这个时候,打电话功能就没有了。这个不好。
最终,还是加上这个功能。由于它继承了手机类,所以,我们就直接使用父类的功能即可。
那么,如何使用父类的功能呢?通过super关键字调用
*/
class Phone {
public void call(String name) {
System.out.println("给"+name+"打电话");
}
}
class NewPhone extends Phone {
public void call(String name) {
//System.out.println("给"+name+"打电话");
super.call(name);
System.out.println("可以听天气预报了");
}
}
class ExtendsDemo9 {
public static void main(String[] args) {
NewPhone np = new NewPhone();
np.call("林青霞");
}
}
方法重写:同名同参,返回值和异常更小,访问权限更大
/*
方法重写的注意事项
父类中私有方法不能被重写因为父类私有方法子类根本就无法继承
子类重写父类注意事项:遵循:”两同、两小、一大“原则
1、两同:方法名相同,形参列表相同
2、两小:子类方法返回值类型比父类方法返回值类型更小或相等,子类方法声明抛出的异常类比父类方法声明抛出的异常类更小或相等
3、一大:子类方法访问权限比父类方法访问权限更大或相等
*/
class Father {
//private void show() {}
/*
public void show() {
System.out.println("show Father");
}
*/
void show() {
System.out.println("show Father");
}
/*
public static void method() {
}
*/
public void method() {
}
}
class Son extends Father {
//private void show() {}
/*
public void show() {
System.out.println("show Son");
}
*/
public void show() {
System.out.println("show Son");
}
public static void method() {
}
/*
public void method() {
}
*/
}
class ExtendsDemo10 {
public static void main(String[] args) {
Son s = new Son();
s.show();
}
}
父类中私有方法不能被继承,所以也不能被重写
方法重写和方法重载的区别
方法重写:在子类中,出现和父类中一模一样的方法声明的现象。
方法重载:同一个类中,出现的方法名相同,参数列表不同的现象。
方法重载可以改变返回值类型
方法重载能改变返回值类型,因为它和返回值类型无关。同名不同参,返回值无关。
Override:方法重写
Overload:方法重载