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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值