重载
重载出现在同一个类当中
,当一个类中的方法名相同而参数列表不同时是可以的,这些相同方法名的方法就是重载的体现。当调用这个同名函数时,会根据你的参数列表来寻找你要调用的那个方法。
package test;
public class Person {
int age;
String name;
//从这里开始
public Person() {
}
public Person(int age) {
this.age = age;
}
public Person(String name) {
this.name = name;
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
//到这里结束
//上面的四个构造函数就属于方法的重载,参数列表不一样执行不一样构造方法
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
public static void main(String[] args) {
Person p1=new Person();
//这里执行的是无参的构造函数,对应上面方法的第一个
System.out.println(p1);
Person p2=new Person(12);
//这里执行的是只有name的构造函数,对应上面方法的第二个
System.out.println(p2);
Person p3=new Person("张三");
//这里执行的是只有age的构造函数,对应上面方法的第三个
System.out.println(p3);
Person p4=new Person(19,"李四");
//这里执行的是有name和age的构造函数,对应上面方法的第四个
System.out.println(p4);
}
}
执行结果
Person [age=0, name=null]
Person [age=12, name=null]
Person [age=0, name=张三]
Person [age=19, name=李四]
重写
重写出现在子类中
,需要继承父类才会有重写。子类重写父类的方法来进行差异化操作。
Person父类
package test;
public class Person {
int age;
public Person(int age) {
this.age = age;
}
public void add() {
this.age++;
}
}
Student子类
package test;
public class Student extends Person{
public Student(int age) {
super(age);
}
public static void main(String[] args) {
Student s=new Student(12);
s.add();
System.out.println(s.age);
}
}
直接执行main方法会得到13,因为s这个对象初始化的时候已经给了age=12,然后调用了add()方法,由于Student子类没有对该方法进行重写,所以执行的是Person父类的add()方法,12++得到13
现在重写add()方法再来试一下
重写add()方法后的Student子类
package test;
public class Student extends Person{
public Student(int age) {
super(age);
}
public void add() {
this.age--;
}
public static void main(String[] args) {
Student s=new Student(12);
s.add();
System.out.println(s.age);
}
}
现在就会得到11,因为子类重写了add()方法,此时执行add()方法执行的是子类重写后的add()方法,12 – – 得到11
最常见的重写
package test;
public class Person {
int age;
public Person(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [age=" + age + "]";
}
}
此处的toString()方法就是重写的toString()方法,那么大家可能就有疑问了,不是说重写只会出现在子类当中吗?为什么Person类没有使用extends关键字也能重写?其实Java中所有的类都是Object基类的子类,都可以重写Object类的方法,只不过Object的子类不需要使用extends关键字修饰而已。