JAVA的重载与重写

  • Post author:
  • Post category:java




重载


重载出现在同一个类当中

,当一个类中的方法名相同而参数列表不同时是可以的,这些相同方法名的方法就是重载的体现。当调用这个同名函数时,会根据你的参数列表来寻找你要调用的那个方法。

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关键字修饰而已。



版权声明:本文为weixin_48510456原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。