第十二天:多态详解

多态
概念:一种事物,多种体现状态。
实现多态前提:继承,重写,向上转型。

属性看类型,方法看对象
父子出现同名属性:当父类引用指向子类对象时,使用对象名调用父类同名属性,参考对象名定义时使用的类型
父子出现同名方法:当父类引用指向子类对象时,使用对象名调用父类同名方法,参考定义对象时使用的类型

向下转型的前提:必须存在向上转型,才有向下转型的可能
Father f = new Father();
Son s = (Son)f; //此时不能实现向下转型,父类引用指向子类对象时才可以向下转
instanceof关键字:对象名.instanceof 所属类型//返回的是一个布尔类型的值(向下转型时可以采用instanceof进行判断是不是所属的对象)

注意:①父类引用可以指向子类对象,但是子类引用不可以指向父类对象;
②如果父类的属性用private进行了封装可以调用父类的getter方法获得父类中的属性


多态常用类型:
①用父类作为方法的形参
PetService ps= new PetService();
Pet p1 = new Dog(“小黑”,“中华田园犬”);//也可以创建父类对象数组用来存放父类对象引用
ps.someOneEatsomething(p1);
ps.someOneShout(p1);
***
②用父类作为方法的返回值(在处理对象时可以采用instanceof看判断是不是需要的对象)//在处理对象返回值的时候,注意要对返回值进行判断是否为空(***)
为什么使用向下转型?
每个子类对象可能会存在个性方法,当使用向上转型后,又想调用子类个性方法,此时出现代码异常,这时候为了解决问题,采取向下转型
public abstract class Human {
private String name;
private String gender;

public Human(String name, String gender) {
    this.name = name;
    this.gender = gender;
}

}

public class Student extends Human{
public Student(String name, String gender) {
super(name, gender);
}
public student(){//父类中没有无参构造函数,子类中创建自己的构造函数就会报错,因为在创建对象向的时候是先创建父类的构造函数,再创建自己的构造函数。
}
@Override
public void work() {
System.out.println(“好好学习,天天向上”);
}
public String play(){
return this.getName()+“在玩游戏”;
}
}

public class HunamService {
public void toWork(Human human){
human.work();
}
public Human findPerson(int type){
if(type1){
return new Student();//必须先得父类创建无参构造,光靠子类创建无参构造而父类不创建无参构造就会报错。
}else if(type
2){
return new ITworker();
}else if{
return new Teacher();
}
}

需要免费的java基础视频和java企业级开发视频以及项目实战(包含SSM框架详细讲解、activiti流程引擎、springboot、springcloud视频讲解和项目实战课程)可以添加qq:1743337375

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值