Java 多态 (一)

多态时为了提高代码复用率和可读性存在的, 简单点说,就是同一个方法可以调用同一个父类的不同子类的功能,这样就避免了到每一个子类中去写这种相同的方法,具体实现见如下代码片段:
Person.java

package shunli.li.duotai;

public class Person {
	private String name;			//定义名称
	public String getName(){		//get名称
		return name;
	}	
	public Person(String name) {	//构造函数
		this.name = name;
	}
	public void inClass() {  		//"课堂方法"
		System.out.println("现在的人,都需要经历课堂生活");
	}
}

Teacher.java

package shunli.li.duotai;

public class Teacher extends Person{
	public Teacher(String name) {			//构造函数
		super(name);						//调用父类构造函数完成构造
	}
	public void inClass() {					//在课堂上干嘛
		System.out.println("我是老师"+getName()+",课堂上我交给学生知识");
	}
}

Student.java

package shunli.li.duotai;

public class Student extends Person{
	public Student(String name) {		//构造函数
		super(name);					
	}
	public void inClass() {				//在课堂上干嘛
		System.out.println("我是学生"+getName()+",我正在课堂上学习");
	}
}

Main.java

package shunli.li.duotai;

public class Main {
	public static void doWhatInClass(Person person) {	//在课堂上做什么方法
		person.inClass();
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	Student perStudent = new Student("李明");				//构造学生类,李明
	Teacher perTeacher = new Teacher("王老师");		//构造老师类,王老师
	/**
	*调用自己类的方法,没得说,肯定是自己类的内容
	*/
	perStudent.inClass();				//调用学生类中的inclass()
	perTeacher.inClass();				//调用老师类中的Inclass()
	/**
	*老师和学生分别调用同一个doWhatInClass()方法,结果会怎么样內
	*/
	doWhatInClass(perStudent);			
	doWhatInClass(perTeacher);
	}

}

程序结果截图
类自己调用和用同一个方法调用结果相同
结果显示,两种方法运行结果相同,这里doWhatInClass方法就是用了多态,拿Student类来说,它是Person的子类,所有它可以上转型为Person类,同时也隐藏了Student类未继承的方法和属性,Person类中具有inClass()方法,它发现Student类也同样具有,因为其本质是Student类上转型而来的所以会调用Student类的inClass();同理,Teacher类也是一样过程;这里注意如果父类具有的某种方法,子类没有重写,那么尽管使用的多态,但是调用任然会是父类的那个方法,它也是到子类查找了的,然并卵,就调用自己的了。如果把doWhatInClass方法中的参数类型,换成了Object也行,因为它是终极父类,动手试一下。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43288322/article/details/83656619