多态的应用
多态的两种实现方式
1.使用父类作为方法形参
2.使用父类作为方法返回值
当作为参数的父类是普通类或者抽象类的时候,构成继承多态,当作为参数的父类是一个接口后塍接口多态
使用父类方法作为参数
普通类形参:当一个形参希望我们传入的是一个普通类的时候我们实际上传入的是该类的对象匿名对象
抽象类形参:当一个形参希望我们传入的是一个抽象类的时候我们实际上传如的是该类的子类对象或匿名对象
接口形参:当一个形参希望我们传入的是一个接口的时候我们实际上传入的是该类的实现类对象或实现类匿名对象
使用父类方法做返回值
普通类:当一个方法的返回值是一个普通类的时候,实际上返回的是该类的对象,我们可以使用该类的对象接受
public class demo01{
public static void main(String[] args){
Student s = new Student();
Person s1 = s.study();
Person p2 = s.eat();
System.out.println(p1)
System.out.println(p2)
}
}
class Person{
}
class Student{
public Person study(){
return new Person();
}
}
public Person eat(){
Person p = new Person();
return p;
}
抽象类:放一个方法的返回值是一个抽象类的时候实际上返回是该抽象类的子类对象我们可以使用该抽象类接受
public class demo01{
public static void main(String[] args){
Student s = new Student();
AbsPersons p1 = s.study();
AbsPersons p2 = s.eat();
子类接口父类的参会那么需要强制类型转换
Person o3 = (Person) s.study();
System.out.println(p1)
System.out.println(p2)
}
}
abstract class AbsPerson{
}
class Student{
public AbsPersonstudy(){
return new Person();
}
}
public Person eat(){
return new AbsPersonstudy();
}
接口:放一个方法的返回值是一个接口的时候,实际上返回的是这个接口的实现类对象,我们可以使用接口接受
public class Test {
public static void main(String[] args) {
Student s = new Student();
IPerson p1 = s.study();
IPerson p2 = s.eat;
Person p3 = (Person)s.study();
System.out.println(p1);
System.out.println(p2);
}
}
interface IPerson{
}
class Person implements IPerson{
}
class Student{
public Iperson study(){
return new Person();
}
public IPerson eat(){
return new IPerson(){};
}
}