多态与重载


前言


当一个函数根据有限范围、单独指定的类型和组合时表示不同的和潜在的异构实现时,可以使用功能重载来实现多态。即一个方法可以有同名多种实现。


一、多态

多态是指某对象的某一行为在不同情况下的不同表现形式。

1. 定义格式

定义格式:父类类型 变量名=new 子类类型();

	// Dog是父类  Labrador是Dog类的一种,即子类
	Dog dog_1 = new Labrador();

2. 多态的作用

  1. 多态用于形式参数类型的时候,可以接受更多类型的数据 ;
  2. 多态用于返回值类型的时候,可以返回更多类型的数据;

3. 多态的示例

	public class OverloadExample{
	
	public static void main(String args[]){
		System.out.println(add("A", "B"));
		System.out.println(add("A", "B", "C"));
		System.out.println(add(1, 2));
	}
	
	//输入字符 a和 b,返回字符串类型
	public static String add(String a, String b){
		return a.concat(b);
	}

	//输入字符 a,b和 c,返回字符串类型
	public static String add(String a, String b, String c){
		return a.concat(b).concat(c);
	}

	//输入整型数 a和 b,返回整数型
	public static int add(int a, int b){
		return a+b;
	}
}

二、重载

多个方法具有相同的名字,但有不同的参数列表或返回值类型。在编译阶段具体决定具体要调用哪个方法。

1. 重载的作用

根据参数列表进行方法的最优匹配,便于用户根据不同的参数调用,调用相同的函数。

2. 重载的原则

(1)必须使用不同的参数列表;
(2)可以使用相同或者不同的返回值类型;
(3)可以使用相同或者不同的权限修饰符;
(4)可以在同一个类内重载,也可以在子类中重载;

3. 重载的示例

(1) 同类下的重载

代码如下(示例):

public void changeSize(int size, String name, float pattern) { }

//不同的参数列表,相同的权限修饰符
public void changeSize(int size, String name) { }

//可以使用不同的返回值
public int changeSize(int size, float pattern) { }
public void changeSize(float pattern, String name) { }

(2) 继承中的重载

代码如下(示例):

public Class Animal{
	public void eat(){
		System.out.println("I want to have water!");
	}
}

public Class Cat extends Animal{
	
	//输入某时刻想吃的食物
	public void eat(String food, String time){
		System.out.println("At " + time "I like to eat " + food);
	}
	
	//无输入
	public void eat(){
		System.out.println("Meow meow, I'm thirsty, I want to have water!");
	}
}

三、重载和重写的对比

  1. 重写时,父类和子类的方法有相同的签名
    重载时,父类和子类的方法有不同的签名
    如果父类和子类 签名不同,则为重载
  2. 对于异常而言,重写必须要求子类比父类可以抛出更少的异常,但是一定不能抛出新的异常。
  3. 重写根据对象类型进行调用,而重载根据参数列表进行调用。
  4. 子类重写的时候不能设置比父类更严苛的权限,但重载不做要求,可以任意改变权限修饰符。
  5. 子类重载了父类的方法,子类仍然可以继承父类的方法。

下面代码是根据参数列表的不同,区分开方法的重载(overloads)和重写(override):

public Class Animal{
	public void eat(int weight){
	}
}

public Class Cat extends Animal{
	
	//此方法改变了参数列表,是重载(overloads)的示例
	public void eat(double weight){
		System.out.println("I like to eat " + weight + "fish!");
	}
	
	//此方法未修改参数列表,是重写(override)的示例
	public void eat(int weight){
		System.out.println("I like to eat " + weight + "fish!");
	}
}

在这里插入图片描述


总结

本文简单介绍了多态和重载的知识,并举出一些示例将重载与重写进行对比。若有纰漏,敬请指正。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值