多态
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);
}
}