重写和重载

本文详细介绍了Java中的方法重写(Override)和重载(Overload)的概念、应用场景及两者之间的区别。方法重写涉及子类与父类的关系,用于实现多态性,而方法重载则在同一类中通过不同的参数列表实现相同功能的不同版本。重写增强了类的复用性,重载提供了代码的灵活性。了解这两者的差异有助于更好地理解和使用Java中的多态特性。
摘要由CSDN通过智能技术生成

目录

什么是重写?

        重写的运用

        重写的作用

什么是重载?

         重载的运用

重写和重载的相同点

重写和重载的区别

什么是重写?

        方法重写(Override/Overwrite)

一般都是表示子类和父类之间的关系,在任意子类中定义了重名和同样的参数列表就构成方法重写

通俗理解:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。

主要特征:

  • 方法名相同参数列表相同,但是具体的实现不同
  • 类重写方法的访问修饰符与父类被重写的访问修饰符一样大,或者比它大
  • 返回值比父类被重写的方法的返回值类型一样
  • 构造方法不能被重写。

        重写的运用

        1.继承

         重写覆盖原来父类的方法

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

class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}

        2. 通过super关键字进行父类的重写函数的调用


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

public class Cat extends Animal{
 
    public void move(){
        super.move();
        System.out.println("猫可以跳、可以吃小鱼");
    }
}

        3. 在子类的重写方法上加 @Override

      idea快捷键: alt+insert 选择 Override Methods

public class People {
    double height;
    double weight;

    public People(double height, double weight) {
        this.height = height;
        this.weight = weight;
    }

    public void speakHello(){
    }

  
}
public class ChinaPeople extends People{//继承People类
    public ChinaPeople(double height, double weight) {
        super(height, weight);
    }
//重写了继承父类中的方法
 @Override
    public void speakHello(){
        System.out.println("ChinaPeople 说 你好");
    }
}

        重写的作用

        增强类的重用性和复用性,扩展性。

什么是重载?

方法重载(Overload)

同一个类中, 具有相同方法名的一组方法, 但是参数列表不一样的这一组方法称为方法重载

参数列表:参数个数、对应位置的参数类型

         通俗理解:重载就是在具有相同功能的一组方法,对于不同的情况写不同的方法,不需要给方法重新命名,用同一个方法名。

               

         重载的运用

public class OverloadDemo {
 
    //1. test()方法第一次重载,没有参数
    void test() {
        System.out.println("No parameters");
    }
 
    //2. test()方法第二次重载,一个整型参数
    void test(int a) {
        System.out.println("a: " + a);
    }
 
    //3. test()方法第三次重载,两个整型参数
    void test(int a, int b) {
        System.out.println("a and b: " + a + " " + b);
    }
 
    //4. test()方法第四次重载,一个双精度型参数
    double test(double a) {
        System.out.println("double a: " + a);
        return a * a;//返回a*a的值
    }
}

         输入结果:

public class Overload {
   public static void main(String args[]){
        OverloadDemo ob=new OverloadDemo();
        double result;
        ob.test();            //定义的是test()方法
        ob.test(10);             //定义的是test(int a)方法
        ob.test(10,20);            //定义的是test(int a,int b)方法
        result=ob.test(123.23);       //定义的是test(double a)方法
        System.out.println("result of ob.test(123.23): "+result);   //输出result的值
   }
}
 
运行结果:    No parameters
a: 10
a and b: 10 20
double a: 123.23
result of ob.test(123.23): 15185.6329

jdk区分两个方法是否相同:

1.方法名是否一样

2.参数是否一样,参数对应位置参数类型是否一样

     

重写和重载的相同点

方法的重载和重写都是实现多态的方式

重写和重载的区别

1、重载发生在本类,重写发生在父类与子类之间;

2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;

3、重载的参数列表不同,重写的参数列表必须相同。

概况:重载是定义相同的方法名,参数不同,重写是子类重写父类的方法;重载是在一个类中,重写是子类与父类之间;重载是编译时的多态性,重写是运行时的多态性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值