0
点赞
收藏
分享

微信扫一扫

Java面向对象之方法重载、重写和关键字this、super

独西楼Q 2022-01-11 阅读 48

文章目录


前言

 今天继续Java面向对象的学习,认识什么是方法重载、什么是方法重写、区别是什么?认识关键字this和super,并了解其用法。
 希望能对你的学习有所帮助!


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

一、方法重载

(1)基本概念

  在同一个类中,方法名相同、参数列表不同的方法之间构成重载关系(Overload);

(2)重载的表现形式

  方法重载的主要体现在:参数的个数不同、参数的类型不同、参数的顺序不同、方法名称要相同。
  形参变量名与返回值类型无关,但是建议返回值类型最好相同。

(3)意义
  方法重载的意义在于:调用者只需要记住一个方法名就可以调用各种不同的版本,从而可以实现多种类型数据的处理。

(4)案例

public class Overload {

	//方法重载体现的参数个数不同
	void show() {
		System.out.println("这是一个没有参数的输出");
	}
	void show(int a) {
		System.out.println(a + "是一个整数");
	}
	void show(int a,String c) {
		System.out.println(a + "是一个整数," + c + "是字符串");
	}
	
	//方法重载体现的参数类型不同
	void show(double a) {
		System.out.println(a + "是一个实数");
	}
	void show(String c) {
		System.out.println(c + "是一个字符串");
	}

	//main方法测试
	public static void main(String[] args) {
		Overload y = new Overload();
		y.show();
		y.show(12);
		y.show(25.3);
		y.show("abcde");
		y.show(5, "xyz");
	}
}

回到目录…

二、方法重写

(1)基本概念

  当父类中继承下来的方法不足以满足子类需求的时候,则需要在子类中把继承下来的方法进行改造,叫做方法的重写/覆写

(2)重写的原则

  1.相同的方法名,相同的参数列表,相同的返回值类型或者返回子类(至少是向上转型)。
  2.访问权限修饰符 >= 父类权限。
  3.不能抛出更大的异常。

  在子类重写的方法中,可以通过super关键字调用父类的“原始”方法。
  父类中的静态方法(含有static修饰的方法)不属于对象层级而是类层级, 所以不能被子类继承,更不能被覆写。

(3)案例

//父类
public class Animal {
	public void eat(){
		System.out.println("小动物正在吃食物~");
	}
}

//子类
class Dog extends Animal {
	@Override
	public void eat(){
		System.out.println("这只修狗正在吃狗粮~");
	}
}

回到目录…

三、关键字this

(1)要点提示

  关键字this表示当前对象的引用
  对于构造方法来说,this(构造方法参数); 代表当前正在构造的对象;
  对于成员方法来说,this.show(); 代表当前正在调用的对象的方法;
  对于成员变量来说,this.name; 代表当前正在调用的对象的变量;
  修饰属性时,如果在当前类中找不到该属性,才去父类中找。

(2)原理

  由于不同的对象调用同一个方法时,在方法体的内部使用this进行记录,因此this代表的对象也就不同,当访问成员变量时候默认解析为:this.成员变量名,其中this.相当于汉语中“我的”,因此不同的类使用会有不同的结果。

(3)使用场合

  a.当形参变量名和成员变量名相同的时候,在方法体的内部会优先选择变量使用,此时就需要使用this.的方式明确使用的是成员变量而不是形参变量。
  b.在无参构造方法中使用this(实参)的方式可以调用本类中的有参构造;在有参构造中使用this()也是可以调用本类中的无参构造;但是不能同时互相调用,否则会形成死循环。

(3)案例

public class Boy {

	private String name;
	private int age;
	
	//无参构造
	Boy(){
		//该this调用本类中的有参构造,实现成员变量的初始化
		this("张三", 19);
	}
	//有参构造
	Boy(String name, int age){
		// this(); 调用本类的无参构造,此时不适用

		//this.name指的是Boy类中的成员变量
		this.name = name;
		this.age = age;
	}
	
	//私有方法:信息转字符串
	private String toString(){
		String ret = "姓名:" + this.name + "年龄:" + this.age;
		return ret;
	}

	//打印信息
	public void show() {
		//this.成员方法名调用本类中的方法
		System.out.println(this.toString());
	}
}

回到目录…

四、关键字super

(1)使用场合

  关键字super表示父类对象的引用
  使用super.方式可以访问父类的成员变量和成员方法。
  使用super()的方式在构造方法中的第一行表示调用父类的构造方法。

(2)案例

public class Student extends Person {
	private int id;

	public Student() {
		super();//表示调用父类中的无参构造方法,编译器会自动添加该代码,所以可省略
	}

	public Student(String name,int age,String nationality,int id) {
		super(name,age,nationality);//调用父类中的有参构造方法
		setId(id);
	}

	//将父类中的show()方法进行覆写
	@Override
	public void show() {
		super.show();//调用父类中的show()方法
		System.out.println("学生学号是:" + id);
	}

	public int getId(){
		return this.id;
	}
	public void setId(int id){
		this.id = id;
	}
}

回到目录…


总结

提示:这里对文章进行总结:
以上就是今天的学习内容,本文是继续Java面向对象的学习,学习了方法重载和方法重写,以及两个关键字的用法。之后的学习内容将持续更新!!!

举报

相关推荐

0 条评论