有些情况下,对象的同一种行为可能存在多种实现过程
例如:人对象的吃行为,吃饭和吃药的过程就存在差异
到底采用那种形式,需要取决于调用者给定的参数
public class Person { public static void main(String[] args) { // TODO Auto-generated method stub } public void eat(食物 a) { } public void eat(药物 b) { } public void eat(口香糖 c) { } }
重载(Overload):一个类中定义多个相同名称的方法
要求:
方法名称相同
参数类型不同(类型,个数,顺序)
与访问修饰符,返回值类型无关
public class Person { public static void main(String[] args) { // TODO Auto-generated method stub Calculator cla1 = new Calculator(); System.out.println( cla1.add(5.6, 3.4) ); System.out.println( cla1.add(5.6, 3.4,3.4) ); } } class Calculator{ public double add(double num1,double num2) { return num1 + num2; } public double add(double num1,double num2,double num3) { return num1 + num2 + num3; } }
带有重载的方法时,需要根据传入的实参去找到与之匹配的方法
好处:屏蔽差异使用,灵活方便
package com.ht.leader.oop; public class Person { public static void main(String[] args) { // TODO Auto-generated method stub Students stu1 = new Students(); stu1.name ="ht"; stu1.age = 12; stu1.sex = '男'; stu1.score = 1.2; Students stu2 = new Students(); stu2.name ="htasd"; stu2.age = 11; stu2.sex = '男'; stu2.score = 1.22; Students stu3 = new Students(); stu3.name ="hsat"; stu3.age = 22; stu3.sex = '男'; stu3.score = 1.21; Teachar t1 = new Teachar(); double reult = t1.totalScore(stu1.score,stu2.score); System.out.println(reult); double[] score = {stu1.score,stu2.score,stu3.score}; double reult2 = t1.totalScore(score); System.out.println(reult2); } } class Students{ String name; int age; char sex; double score; } class Teachar{ String name; int age; char sex; double salary; public double totalScore(double score1,double score2) { return score1 + score2; } public double totalScore(double[] score) { double num = 0.0; for(int i = 0; i < score.length ; i++) { num += score[i]; } return num; } }