一、作用
子类一旦重写父类中的某个方法,子类对象调用的是子类中重写的方法,对父类同名方法屏蔽。
二、@Override
强制检查下面的方法是否为重写,如果不是重写那么就会报错。
class A{
public void or(){
System.out.println("这不是重写。");
}
}
class B extends A{
@Override
public void or(){
System.out.println("这是重写。");
}
}
三、不能被重写的内容
- private修饰的方法;
- final修饰的内容;
- 被static修饰的内容;
如果子类中定义一个方法,在它的父类中有相同方法签名的静态方法,子类中的这个方法也必须是静态的,虽然可以定义这个方法,但是不是重写。
四、要求
- 方法签名必须完全相等
- 基本数据类型必须相等, 引用数据类型中子类的返回值类型不能大于父类的返回值类型
class A{
public long or(){
System.out.println("这不是重写。");
return -1;
}
}
class B extends A{
public int or(){
System.out.println("这是重写。");
return -1;
}
}
- 子类重写方法的的权限修饰符不能低于父类中这个方法的权限修饰符
class A{
protected void or(){
System.out.println("这不是重写。");
}
}
class B extends A{
public void or(){
System.out.println("这是重写。");
}
}
五、重写和重载的区别
重载:
- 同一个类中
- 多个方法方法名相同
- 方法签名不同
重写: - 在不同的类中
- 通过继承实现
- 方法签名相同