方法重载(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可以使编译器帮助检查是否进行了正确的覆写,如果程序员希望进行覆写,但是不小心写错了方法签名,编译器会报错。