Java中方法的重载与重写

(个人理解,仅供参考)

基础知识

Java中存在两种多态,即重载(Overload)和重写(Override),重写是和继承有关的多态。

方法重载

方法重载的意思是,一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型,甚至包括参数的顺序不同。例如:在下面的Animal类中,eat方法就是一个重载方法。

class Animal {
    public void eat() {  //无参的实例方法
        System.out.println("Animal eat");
    }
    public void eat(int n) {  //参数为int型的有参实例方法
        System.out.println("eat:"+n);
    }
    public void eat(String m) {  //参数为Str型的有参实例方法
        System.out.println("eat:"+m);
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();  //创建一个Animal类的实例对象a
        a.eat();  //调用无参的eat方法
        a.eat(123);  //调用int型参数的eat方法
        a.eat("apple");  //调用Str型参数的eat方法
    }
}

在这里插入图片描述

方法重写

子类通过重写可以隐藏已经继承的实例方法(方法重写也成为方法覆盖)

重写的语法规则

如果子类可以继承父类的某个实例方法,那么子类就有权重写这个方法。重写就是指在子类中定义一个方法,这个方法的类型和父类方法的类型一致,或者是父类的方法的类型的子类型(所谓子类型,是指如果父类的方法的类型是“类”,那么允许子类的重写方法的类型是“子类”),并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。子类如此定义的方法称为子类重写的方法(不属于新增的方法)。

重写的目的

子类通过方法的重写可以隐藏继承的方法,可以把父类的状态和行为改变为自身的状态和行为。当子类重写了父类的方法A后,子类对象调用方法A时调用的就是重写后的方法A,而不是其父类的方法A。重写方法既可以操作子类继承的成员变量,也可以操作子类新声明的成员变量。(另外,如果子类想使用被隐藏的方法,必须使用关键字super。)
例如:Dog类继承Animal类,并且重写了eat方法。

class Animal {
    public void eat() {  //无参的实例方法
        System.out.println("Animal eat");
    }
    public void eat(int n) {  //参数为int型的有参实例方法
        System.out.println("Animal eat:"+n);
    }
    public void eat(String m) {  //参数为Str型的有参实例方法
        System.out.println("Animal eat:"+m);
    }
}

class Dog extends Animal{
	public void eat() {
		System.out.println("Dog eat");
	}
	public void eat(int n) {  //参数为int型的有参实例方法
        System.out.println("Dog eat:"+n);
    }
    public void eat(String m) {  //参数为Str型的有参实例方法
        System.out.println("Dog eat:"+m);
    }
}
    
public class Main {
    public static void main(String[] args) {
        Animal a = new Animal();  //创建一个Animal类的实例对象a
        Dog dog = new Dog();
        a.eat();  //调用无参的eat方法
        a.eat(123);  //调用int型参数的eat方法
        a.eat("apple");  //调用Str型参数的eat方法
        dog.eat();
        dog.eat(456);
        dog.eat("meet");
    }
}

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值