目录
方法重写
什么是方法重写?
方法重写指的是当子类和父类出现了一摸一样的方法声明
方法重写有什么用?
当父类中有一个方法时,子类会继承,但是子类并不一定能够用到,或者说继承过来的方法不满足使用,需要重新写方法体,但是仅限于方法体的修改。
案例:手机拥有打电话的功能,智能手机拥有视频通话的功能。
class Phone{
public void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{
}
public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}
//输出结果
电话拨通中
SmartPhone类中是不含有call的方法的,但是因为其父类Phone含有该方法,所以可以引用call方法;
但是作为智能手机不应该只有call的方法,所以我们要将其从父类中继承过来的方法进行重写来加入新的功能;这就是方法重写的意义所在。
class Phone{
public void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{
@override //@override 是具有检测功能的注解,检测下方的方法是否为方法重写
public void call(){//方法重写必须与父类的返回值类型,方法名,形参一致
System.out.println("视频通话已开启");//我们加入了新的输出语句
System.out.println("电话拨通中");//这里我们应该简化语句写出:super.call();
}
}
public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}
//输出结果
视频通话已开启
电话拨通中
方法重写的注意细节
现在我们已经了解方法重写的意义,方法重写中还有一些细节需要我们注意;
我们发现不管是父类的还是子类方法前面有时候会加上public、private等等词语;
我们将加在前面的这些词语称为访问权限修饰符;他们的等级为:public>protected>private
class Phone{
//在父类中设置一个默认权限的方法(没有加修饰符就代表默认)
void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{
@override
//子类重写父类方法时访问权限必须高于或等于父类的访问权限
void call(){
//此时可以加的修饰词为:public、protected
System.out.println("视频通话已开启");
super.call();
}
}
public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}
总结:
- 重写是发生在继承的基础上
- 重写是针对方法而言的
- 子类方法重写时,方法的声明一定要与父类的方法声明保持一致
- 父类的私有方法子类不能继承和进行重写
- 子类对父类方法进行重写时,访问权限修饰符的等级一定不可小于父类方法的访问权限修饰符等级
- public>protected>private