/*
方法重写(方法覆盖/方法复写):
子类中出现了和父类中方法声明一模一样的方法
方法重载:
本类中出现方法名一样,参数列表不同的方法。与返回值无关
方法重写的特点(上一个的已经举例):
A:如果方法名不同,就调用对应的方法
B:如果方法名相同,最终使用的时子类自己的
子类对象的调用方法的时候:
先找子类本身,再找父类
方法重写的应用:
当子类需要父类的功能,而功能主题子类有自己特有内容时,可以重写父类中的方法
这样,即沿袭了父类的功能,又定义了子类特有的内容
案例:
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 Demo9 {
public static void main(String[] args) {
NewPhone np = new NewPhone();
np.call("林青霞");
}
}
/*
方法重写的注意事项
A:父类中的私有方法不能被重写
因为父类私有方法子类根本就无法继承,更不可能重写
B:子类重写父类方法时,访问权限不能更低
意思:子类的访问权限一定要大于等于父类的访问权限
最好一致
C:父类静态方法,子类也必须通过静态方法进行重写
其实这个算不上方法重写,但时现象确实如此,至于为什么在多态中讲
子类重写父类方法的时候,最好声明一模一样
*/
class Father{
public void show(){
System.out.println("show Father");
}
public static void methon(){
System.out.println("show Father");
}
}
class Son extends Father{
/*
void show(){
System.out.println("show Son");//无法编译 子类的权限低于父类
}
*/
public void show(){
System.out.println("show Son");
}
/*
public void methon(){
System.out.println("show Father");//无法编译 父类是静态 子类不是静态无法覆盖
}
*/
}
class Dome{
public static void main(String[] args){
//创建对象
Son s = new s Son();
s.show();
}
}
/*
方法重写(方法覆盖/方法复写):
子类中出现了和父类中方法声明一模一样的方法
方法重载:
本类中出现方法名一样,参数列表不同的方法。与返回值无关
方法重载能改变返回值类型,因为它和返回值类型无关
Override:方法重写
Overload:方法重载
this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用
this:代表当前类的对象引用
super:代表父类存储空间的标识(可以理解为父类的引用,通过这个东西可以访问父类的成员)
引用场景:
成员变量:
this.成员变量
super.成员变量
构造方法:
this(...)
super(...)
成员方法:
this.成员方法
super.成员方法
*/
Java方法重写与重载详解,代码举例
最新推荐文章于 2023-04-23 16:49:13 发布
本文详细解析了方法重写(覆盖/复写)与方法重载的概念,阐述了两者在子类与父类之间的应用及注意事项。通过具体案例说明了如何在子类中正确调用父类的方法。
540

被折叠的 条评论
为什么被折叠?



