java中方法的重载与重写
1.方法重载
在同一个类中,方法名相同,参数列表不同(参数位置、参数个数、参数类型),与返回值类型无关
问题:为什么需要所谓的方法的重载?
原因:多个方法具有相同的功能特性,但是呢,每个功能的实现方式可能不同
//需求:求较大值(两个数)
public static int max(int x,int y){
if(x>y){
System.out.println(x);
}else{
System.out.println(y);
}
}
//求较大值(三个数)
public static int max(int x,int y,int z){
if(x>y){
if(x>z){
System.out.println(x);
}else{
System.out.println(z);
}
}else{
if(y>z){
System.out.println(y);
}else{
System.out.println(z);
}
}
}
//案例
public static void main(String[] args){
int x = 5;
int y = 6;
int z = 7;
max(x,y,z);
}
//需求:求较大值(两个数)
public static void max(int x,int y){
System.out.println("-----------");
if(x>y){
System.out.println(x);
}else{
System.out.println(y);
}
}
//类型不同
public static void max(byte a,int b){
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
}
/*public static int max(int a,byte b){
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
return 0;
}*/
//位置不同
public static void max(int a,byte b){
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
}
//个数不同
//求较大值(三个数)
public static void max(int x,int y,int z){
if(x>y){
if(x>z){
System.out.println(x);
}else{
System.out.println(z);
}
}else{
if(y>z){
System.out.println(y);
}else{
System.out.println(z);
}
}
}
2.方法重写
在继承或实现的关系下,方法名相同,参数列表相同,返回值类型相同,子类的修饰符权限要大于或等于父类中的修饰符权限
@Override,如果方法上有该注解,那就意味着该方法一定是从父类中重写的,如果没有,那么该方法就只是该类中的一个方法而已,此时需要注意的是,如果没有加@override,但是父类中有该方法,虚拟机仍然会认为,该方法为重写的方法,如果父类中没有该方法那就是一个普通方法而已,不会报错
//抽象类
public abstract class CatKinds {
//abstract告诉虚拟机这是一个抽象方法
public abstract void eat() ;
public void climbTree() {
System.out.println("爬树");
}
}
public class Cat extends CatKinds{
@Override
public void eat() {
System.out.println("小口吃");
}
public void climbTree() {
System.out.println("快速灵敏的爬树");
}
}
3.问题:抽象方法不能与哪些关键词共存?为什么?
回答:static、final、private
问题:抽象方法能否为静态的?
回答:静态方法可以通过类名直接调用,而抽象方法是没有方法体的,调用就没有任何的意义
问题:抽象方法能否为私有的?
回答:私有的方法只能在当前类中使用,当前类中进行调用,没有任何意义,因为没有方法体
问题:抽象方法能否使用final关键字修饰?
回答:不允许的,抽象方法是需要被子类重写的,而final关键字修饰的方法代表最终方法,不能被修