面向对象三大特性【多态】

多态
1.什么是多态
多态就是同一操作行为作用于不同操作对象,从而可以执行不同的操作结果。
比如:对于一个学生来说,不仅要学习英语,还要学习数学等科目,这些科目都属于学科。
2.使用多态的前提
(1)必须要有继承的关系
(2)必须要有重写的方法
(3)让父类的引用持有子类对象,实现类的对象
多态实例
创建一个Person的父类,有name 属性

public abstract class Person {
	private String name;
	
	public Person(String name) {
		this.name = name;
	}
	public void study(Subject e) {
		System.out.println(this.name + "要学习" + e.getName());
	}

人的工作是要学习,在创建一个学习很多科目,下面在创建一个科目类,科目类里面有科目的名称

public abstract  class Subject {
	private String name;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

人要学习英语,创建一个English类,并让他继承Subject的属性

public class English extends Subject{
	public English() {
		super.setName("科技英语");
	}

人要学习数学,创建一个Math类,并让他继承Subject的属性

public class Math extends Subject {
	public Math() {
		super.setName("高数");
	}

以上代码中Math\ English均是Subject的多态
输出结果

public class TestDuotai {

	public static void main(String[] args) {
		Person p = new 中国人("张三");//只能实例化子类,引用类型是Person
		English e = new English();
		Lisan l = new Lisan();
		Math m = new Math();
		p.study(e);
		p.study(m);
		p.study(l);
		
	}
}

在这里插入图片描述
抽象类abstract
1.抽象方法是一种没有实现的方法,定义抽象方法的类称为抽行类
2.注意:
a.一个方法如果没有实行的话不需要有大括号,只需要public/private/protected+abstract+返回类型+方法名+()+“;”即可,这个与纯虚函数是类似的。
b.含有抽象方法的类必须定义为抽象类
ege:

public abstract class Person {//抽象类
	private String name;
	
	public Person(String name) {
		this.name = name;
	}
	public void study(Subject e) {
		System.out.println(this.name + "要学习" + e.getName());
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public abstract void speak(); //抽象方法
}

3.抽象类不能被实例化,所以无法对抽象类进行new,只可以对所用抽象类的子类进行方法重写,通过调用子类重写的方法进行使用。
age:
这里将Subject抽象使其无法实例化

public abstract  class Subject {
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

这里将Person抽象用于更具体的中国人调用

public abstract class Person {
	private String name;
	public Person(String name) {
		this.name = name;
	}
	public void study(Subject e) {
		System.out.println(this.name + "要学习" + e.getName());
	}
public class 中国人 extends Person {
	public 中国人(String name) {
		super(name);
	}
	public void speak() {
		System.out.println("中文");
	}
}

调用方法

public class TestDuotai {
	public static void main(String[] args) {
		Person p = new 中国人("张三");//只能实例化子类,引用类型是Person
		English e = new English();
		Lisan l = new Lisan();
		Math m = new Math();
		p.study(e);
		p.study(m);
		p.study(l);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44084434/article/details/90107916