方法重载(override)与方法覆写(overload)的区别

1.方法名相同,但是各自的参数不同,叫做方法重载。方法重载的返回值都相同。其功能类的方法都使用同一名字。
举一个简单的方法重载的例子,对hello()方法进行不断地重载,从简单的输出字符串,到可以输出使用者的名字,再到考虑使用者的年龄输出不同的字符串。

方法构造的代码如下:

static class Human {}

    public void sayHello() {
        System.out.println("Hello guy!");
    }

    public void sayHello(String name) {
        System.out.println("Hello ,"+name);
    }

    public void sayHello(String name,int age) {
    	if(age>18)
    	{
    		System.out.println("Hi,"+name+"!");
    	}
    	else
    	{
    		System.out.println("Hello,"+name+"!");
    	}
    }

思考一下如何打印出构造的方法?``

方法重载注意事项
调用语句的自变量列表必须足够判明要调用的是那个方法,重载方法的参数列表必须不同,即参数个数或参数类型或者参数的顺序不同

2.要理解方法覆写的概念,首先要了解如何对方法进行继承。当你新建的一个类已经包含了上一个类中所构建的字段和方法,而你又不想在这个类中再写重复的代码,这时候继承就派上用场了,上一个类叫做父类,而你新建的这个类叫做子类。注意使用关键字extends
此时不需要写重复的字段。

下面是简单的类的继承的应用

class Student{
		private String name;
		private int age;
		
		public String getName()
		{
			return name;
		}
		public void setName(String name)
		{
			this.name=name;
		}
		public int getAge()
		{
			return age;
		}
		public void setName(int age)
		{
			this.age=age;
		}
		
		
		 class LittleStudent extends Student{
			 private int score;
			 public int getScore()
				{
					return score;
				}
				public void setScore(int score)
				{
					this.score=score;
				}
			 
		 }

从子类中继承父类的方法(廖雪峰JAVA继承练习题答案)

public class Main {
    public static void main(String[] args) {
        Person p = new Person("小明", 12);
        Student s = new Student("小红", 20, 99);
        // TODO: 定义PrimaryStudent,从Student继承,新增grade字段:
        Student ps = new PrimaryStudent("小军", 9, 100, 5);
        System.out.println(ps.getScore());
    }
}

class Person {
    protected String name;
    protected int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

class Student extends Person {
    protected int score;

    public Student(String name, int age, int score) {
        super(name, age);
        this.score = score;
    }

    public int getScore() { return score; }
}
class PrimaryStudent extends Student{
    // TODO
     protected int grade;
    public PrimaryStudent(String name,int age,int score,int grade)
  {
      super(name,age,score);
      this.grade=grade;
  }
  
    public int getGrade()
  {
     return grade;
   }
}

所以在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,就叫做覆写(也叫做重写)。
overload与override不同的是,方法签名不同的是重载(overload),方法签名相同且返回值相同的是覆写(override),多敲代码会掌握的更加熟练。

加上@override可以使编译器帮助检查是否进行了正确的覆写,如果程序员希望进行覆写,但是不小心写错了方法签名,编译器会报错。