目录
方法的重载
方法的重载(Overload):
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。调用时,会根据不同的参数表选择对应的方法。方法的重载即:同名不同参
要求:
方法名相同
参数不同{
1.参数类型不同
2.参数个数
3.参数的顺序
}
与返回值类型无关,与访问权限修饰符无关,与方法体无关
发生在同一个类里
重载的好处
不用为了对不同的参数类型或参数个数,而写多个函数,系统可以自动匹配;
多个函数用同一个名字,但参数表,即参数的个数或(和)数据类型可以不同,调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的函数。
展示:
public int max(int num1, int num2){
int max=num1>num2?num1:num2;//求两个数的最大值
return max;
}
public int max(int num1,int num2,int num3){
int max1=num1>num2?num1:num2;//求三个数的最大值
int max=max1>num3?max1:num3;
return max;
}
主方法运行:
public static void main(String[] args) { test03 x=new test03(); System.out.println(x.max(1,3)); System.out.println(x.max(1,3,5)); }
运行结果:
3----自动调用两个参数的方法
5----自动调用三个参数的方法
这个时候就有一个问题了
能不能用一个方法,计算多个数字相加:
答案呼之欲出了:利用数组
利用数组计算多个数相加:
public void sum(int []arr){
int result=0;
if(arr.length<2){
result=arr[0];
}else{
for (int i : arr) {
result+=i;
}
}
return result;
}
public static void main(String[] args) {
test03 x=new test03();
int []arr=new int[]{1,5,6};
System.out.println(x.sum(arr));
}
但这么写,主方法里,肯定是要添加一个数组,这样也麻烦,有没有可以直接在调用函数时,就把值写入里面的方法呢。答案是有啦:
简便算法:不定长参数(本质是数组)定制的时候不用填数组了,但在方法里按照数组使用。
参数列表中,至多有一个不定长参数
不定长参数必须在最后位置
不定长参数:
public int sum(int...arr){
int result=0;
if(arr.length<2){
result=arr[0];
}else{
for (int i : arr) {
result+=i;
}
}
return result;
}
public static void main(String[] args) {
test03 x=new test03();
System.out.println(x.sum(1,5,6));
}
访问权限
public:一个工程下任意位置都可以访问
类,属性上,方法,构造器
protected:可以跨包,如果跨包,必须是他的子类
属性,方法,构造器
(默认的):当前包下可以访问
类,属性,方法,构造器
private:只有当前类可以访问
属性,方法,构造器
构造器(构造方法)
语法:访问权限修饰符 类名(参数列表){ }
public a(){}
特点:
- Java在new对象的时候,先看对象所对应的类有没有构造器,有的话有什么样的构造器;如果没有构造器,则无法构建对象(创建对象)
- 每个类会有一个默认的无参的构造器
- 在对象被实例化时调用了构造器
- 我们创建对象实际上是通过构造器创建的
- 如果一个类中显示的声明了一个构造器,原来默认自带的无参构造器就没用了。如果方法有多个构造器,方法必须重载。
方法的重写
方法重写基于继承,子类继承父类,子类可以调用父类的方法,同时子类也可以重写父类中的方法,来实现和父类中不同的业务处理逻辑。重写要求子类中方法与父类中的方法名称仙童,参数相同,参数类型相同。当子类调用该方法时,基类中的方法则被覆盖。方法重写即:重写父类方法,同名也同参
示例:动物会叫,叫声各不相同
动物类
public class Animal {
public void speek(){
System.out.println("动物都会叫");
}
}
狗类,继承自动物类
class Dog extends Animal {
/*
重写父类的speek方法
*/
@Override
public void speek() {
System.out.println("汪汪汪");
}
}
猫类,继承自动物类
class Cat extends Animal {
/*
重写父类的speek方法
*/
@Override
public void speek() {
System.out.println("喵喵喵");
}
}
思维导图: