Java 重载与重写

重写

重写(Overwriting)是子类对父类的函数进行重新定义。

  • 方法名、返回值类型、参数列必须保持一致(java7 及更高版本:返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类)
  • 访问权限:重写的方法访问权限必须大于等于父类方法。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。也就是子类中的方法不能做更严格的限制。
  • 异常:重写的方法抛出的检查异常不能大于父类方法,可以抛出任何非检查异常
  • 声明为final 跟 static的方法不能被重写
  • 构造方法不能被重写
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

子类中调用父类被重写方法时,可以使用super关键字。

public class OverRiddingTest {
    public static void main(String[] args) {
        Animal a = new Animal();
        Human h = new Human();
        a.move();
        h.move();
        h.play();
        Animal ah = new Human();
        //ah.play();父类申明变量指向子类实例,该父类变量不能调用父类不存在的变量和方法,否则会编译错误
    }
}

class Animal{
    public void move(){
        System.out.println("动物可以移动");
    }
}

class Human extends Animal{
    public void move(){
        super.move();
        System.out.println("人是动物,可以双脚直立行走");
    }
    
    public void play(){
        System.out.println("人会种花");
    }
}
View Code

重载

重载(Overloading)是让类以统一的方式处理不同类型数据的一种手段。

  • 在一个类里面,方法名字相同,而参数(类型、个数)不同
  • 返回类型可以相同也可以不同
  • 可以有不同的访问修饰符
  • 可以抛出不同的异常
  • 多态性:调用时,通过传递的参数的个数、类型来决定使用哪个方法
public class OverLoadingTest {
    public static void main(String[] args) {
        Dog g = new Dog();
        g.bark("hahahahah");
        g.bark(3);
    }
}

class Dog{
    public void bark(){
        System.out.println("狗吠");
    }
    
    public void bark(int i){
        System.out.println("狗吠了"+i+"声");
    }
    
    public void bark(String s){
        System.out.println(s);
    }
}
View Code

构造方法不能被重写,可以被重载。

原文地址:https://www.cnblogs.com/jszfy/p/12795489.html