概述
多态和重载
- 前言
- 一、多态
- 1. 定义格式
- 2. 多态的作用
- 3. 多态的示例
- 二、重载
- 1. 重载的作用
- 2. 重载的原则
- 3. 重载的示例
- (1) 同类下的重载
- (2) 继承中的重载
- 三、重载和重写的对比
- 总结
前言
当一个函数根据有限范围、单独指定的类型和组合时表示不同的和潜在的异构实现时,可以使用功能重载来实现多态。即一个方法可以有同名多种实现。
一、多态
多态是指某对象的某一行为在不同情况下的不同表现形式。
1. 定义格式
定义格式:父类类型 变量名=new 子类类型();
// Dog是父类 Labrador是Dog类的一种,即子类
Dog dog_1 = new Labrador();
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!");
}
}
三、重载和重写的对比
- 重写时,父类和子类的方法有相同的签名,
重载时,父类和子类的方法有不同的签名。
如果父类和子类 签名不同,则为重载 - 对于异常而言,重写必须要求子类比父类可以抛出更少的异常,但是一定不能抛出新的异常。
- 重写根据对象类型进行调用,而重载根据参数列表进行调用。
- 子类重写的时候不能设置比父类更严苛的权限,但重载不做要求,可以任意改变权限修饰符。
- 子类重载了父类的方法,子类仍然可以继承父类的方法。
下面代码是根据参数列表的不同,区分开方法的重载(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!");
}
}
总结
本文简单介绍了多态和重载的知识,并举出一些示例将重载与重写进行对比。若有纰漏,敬请指正。
最后
以上就是端庄金鱼为你收集整理的多态与重载前言一、多态二、重载三、重载和重写的对比总结的全部内容,希望文章能够帮你解决多态与重载前言一、多态二、重载三、重载和重写的对比总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复