方法的重写与重载

本文详细介绍了Java中的方法重载(Overload)和重写(Override)概念,包括各自的定义、要求和示例。方法重载发生在同一类中,方法名相同但参数列表不同;而方法重写是子类对父类方法的改造,名称和参数列表必须完全相同。文章还提供了相关的面试题,强调了子类实例化时调用父类构造器的重要性,并总结了重载和重写在多态中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法重载Overload

重载定义

      同一个类中(本类声明的或继承自父类的)的方法,方法名相同,参数列表不同的情况,这就叫方法重载。

重载要求

1.与返回值类型无关。

2.参数列表不同指的是,参数个数不同,类型不同,顺序不同。

3.调用方法时,多个方法都匹配,找最匹配的方法来调用。

重载举例

class Demo6 {

        //求两个整数的和
        public int sum(int a,int b){
            return a+b;
        }

        //求两个小数的和
        public double sum(double a, double b){
            return a+b;
        }

        //求三个整数的和
        public int sum(int a, int b, int c){
            return a+b+c;
        }

        //求一个小数与一个整数的和
        public  double sum(double a, int b){
            return a+b;
        }

}
 class Demo08 {
    public static void main(String[] args) {
        Demo6 d = new Demo6();

        System.out.println(d.sum(2, 3));
        System.out.println(d.sum(2, 3, 8));
        System.out.println(d.sum(3.7, 2.5));
        System.out.println(d.sum(1.7, 4));
        System.out.println(d.sum(1, 3.5));
    }
}

方法重写(Override)

当子类继承了父类的某个方法之后,发现这个方法并不能满足子类的实际需求,那么可以通过方法重写,覆盖父类的方法。

重写定义

子类中定义与父类中相同的方法,一般方法体不同,用于改造并覆盖父类的方法。

重写要求

1.必须保证父子类之间重写方法的名称相同。

2必须保证父子类之间重写方法的参数列表也完全相同。

3.子类方法的返回值类型必须【小于等于】父类方法的返回值类型(小于其实就是是它的子类,例如:Cat< Animal)。注意:如果返回值类型是基本数据类型和void,那么必须是相同。

4.子类方法的权限必须【大于等于】父类方法的权限修饰符。

5.子类方法声明的异常不能比父类大。

重写举例

class Super {
    Super s;
    protected int get() {
        return 4;
    }

    public Super getS() {
        return s;
    }
}

class Sub extends Super {
    // 子类重写 父类 gets(),返回值为 父类的子类,编译通过,
    @Override
    public Sub getS() {
        return new Sub();
    }

    /*编译失败:原因分析
        方法重写 返回值为基本数据类型的 或者 void 类型的,不可改变返回值,
         */
//    public long get() {
//        return 5;
//    }
    //该方法报错原因,方法的权限为 缺省 权限小于 protecte
//         int get() {
//        return 5;
//    }
//重写方法权限大于 父类方法权限
    @Override
    public int get(){
        return 6;
    }



    public static void main(String[] args) {
        Super s = new Sub();
        System.out.println(s.get());
    }
}

注意事项:

面试题:

class Super {
	int i = 0;

	public Super(String s) {
		i = 1;
	}
}

class Demo extends Super {
	public Demo(String s) {

		i = 2;
	}

	public static void main(String[] args) {
		Demo d = new Demo("yes");
		System.out.println(d.i);
	}
}

//编译失败,因为父类中缺少空参数的构造器。

//或者子类应该通过super语句指定要调用的父类中的构造器。

        子类对象实例化时一定会调用父类构造器,如果父类提供了带参的构造器(无参的构造器就会省略,不在提供),子类在调用时 如果不显示调用父类的有参构造,n那么就会报措,同理,子类提供了无参构造器,父类提供有参构造器的同时一定要提供无参构造器。

总结

       重载、重写都是java多态的表现。方法重写是java子父类间的多态,方法重载 是java单类内部的多态表现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值