Demo02.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package course.polymorphism;
  2. /**
  3. * @author WanJl
  4. * @version 1.0
  5. * @title Demo02
  6. * @description 向下转型(向下造型)
  7. * @create 2026/7/24
  8. */
  9. public class Demo02 {
  10. /*
  11. 多态中的转型
  12. 向上造型
  13. 父类的引用指向子类的对象
  14. 向下造型
  15. 子类的引用指向父类的对象
  16. 格式: 子类类型 对象名=(子类类型)父类的引用名;
  17. 向下造型的前提一定是向上造型。
  18. 1、先要执行向上造型 : 父类类型 对象名=new 子类类型();
  19. 2、再执行向下造型 : 子类类型 子类对象名=父类对象名;
  20. 前提:Student extends Person
  21. Person p=new Student();
  22. Student s=(Student)p;
  23. 什么时候要使用向下造型呢?
  24. 需要使用子类对象特有的方法。
  25. 比如父类:外卖类
  26. 子类:麻辣烫类 、手撕烤鸭类、汉堡类
  27. 有这样一个方法:
  28. public void 点外卖(外卖类 wm){
  29. //需要判断 什么样的外卖,执行什么样的操作
  30. //这时候就需要判断外卖类的对象名 wm到底指向的手撕烤鸭对象还是麻辣烫对象
  31. //并且需要进行向下转型 把外卖类转换为手撕烤鸭或麻辣烫
  32. //这时候就需要有一个运算符 来判断 这个 wm 对象 到底是 手撕烤鸭类,还是 麻辣烫类
  33. //使用 instanceof 运算符进行判断
  34. // 格式: 对象名 instanceof 类型
  35. // 通俗的理解: 判断 关键字 左边的变量,是否是属于 右边的类型,返回的是boolean类型结果
  36. // 运算结果 是一个布尔值
  37. if (wm instanceof 手撕烤鸭类){
  38. // 比如 转型为手撕烤鸭类:
  39. 手撕烤鸭类 ssky=(手撕烤鸭类)wm;
  40. //调用手撕烤鸭类的特有方法
  41. ssky.准备塑料手套();
  42. }else if(wm instanceof 麻辣烫){
  43. // 比如 转型为麻辣烫类:
  44. 麻辣烫类 mlt=(麻辣烫类)wm;
  45. mlt.准备筷子();
  46. }
  47. }
  48. */
  49. }