Java 重写与重载


重写(Override)与重载(Overload)

构造器(constructor)是否可被重写 ?

构造器不能被继承,因此不能被重写,但可以被重载。

重写(Override)

class Animal{
   public void move(){
      System.out.println("动物可以移动");
   }
}
 
class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}
 
public class TestDog{
   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象
 
      a.move();// 执行 Animal 类的方法
      b.move();// 执行 Dog 类的方法
   }
}

编译运行结果如下:

动物可以移动
狗可以跑和走

重载(Overload)

public static void main(String[] args){
        Overloading o = new Overloading();
     
        System.out.println(o.test());
    	System.out.println(o.test(1));
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }

class Overloading{
	/**
	 * 一个类中定义的方法,是允许重载 (相同的方法名称)
	 * 
	 * 1、方法名称相同
	 * 2、参数列表长度  | 参数列表类型 | (参数类型顺序不同)
	 * 
	 * 注意: 与返回值类型无关
	 */
	public int test(){
        System.out.println("test1");
        return 1;
    }
	
	public void test(int a){
        System.out.println("test2");
    }   
	
	//以下两个参数类型顺序不同
    public String test(int a,String s){
        System.out.println("test3");
        return "test3";
    }   
 
    public String test(String s,int a){
        System.out.println("test4");
        return "test4";
    }   
}

重载和重写的区别

方法的重载和重写都是实现多态的方式,区别在于:

重载实现的是编译时的多态性,重写实现的是运行时的多态性。

  • 重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分

  • 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。

方法的重写规则

  • 方法名和参数名必须相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
  • 访问权限不能比父类中被重写的方法的访问权限更低。
  • 父类的成员方法只能被它的子类重写。
  • 声明为 final 的方法不能被重写。
  • 声明为 static 的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值