重写(Override)和重载(Overload)一定要分的开 ,重写是发生在父子俩重载是放生在一个类身上,
重写的细节有很多:
1.子类重写的父类的一个方法那方法明必须一样,
class A{
public void show(){
}
}
class B extends A{
@Override
public void show() {
}
}
2。参数的个数和顺序也必须一样,如果不一样就构不成重写
class A{
public void show(int num , String str){
}
}
class B extends A{
public void show(int num,String str) {
}
}
3.子类的这个方法返回可以和父类这个方法的返回值一样,或者是父类方法返回值的子类,如果子类的返回类型不是父类的返回类型也不是子类,方法名和参数都一样的就是报错,
class A{
// 我们创建一个动物类父类子类位狗
// 返回动物
public Animal show(int num , String str){
return null;
}
}
class B extends A{
// 返回狗实动物的子类
public Dog show(int num,String str) {
return null;
}
}
class Animal{
}
class Dog extends Animal{
}
4.访问修饰符也必须大于父类的访问修饰符,如:父类的修饰符是 protected,子类的是public就没事,如果父类的是public ,子类是protected的就会报错
class A{
protected void show(int num , String str){
}
}
class B extends A{
public void show(int num,String str) {
}
}
5.静态方法不可以重写,因为静态方法是属于类的不是属于对象
public static void main(String[] args) {
A a = new B();
a.show();
}
class A{
public static void show(){
System.out.println("我是A类");
}
}
class B extends A{
public static void show() {
System.out.println("我是B类");
}
}
main方法会打印:我是A类
@Override
如果再子类方法上面添加一个Override,就表示这个方法是重写父类的方法,如果这方法和重写的要求不一样就会报错,没写Override标志的,个方面和重写大部分要求都一样可以回被判定为是重写,