多态.txt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. 面向对象的三大特征:封装、继承、多态
  2. 多态
  3. 多态就是同一个对象,在不同时刻不同环境表现出来的不同形态。
  4. 多态的前提:
  5. 要具有继承关系(继承父类),或具有实现关系(实现接口)。
  6. 要进行方法的重写。
  7. 要【父类的引用指向子类的对象】
  8. 父类 对象名=new 子类();
  9. 多态有什么好处?
  10. 定义方法的时候,可以使用父类类型作为参数,在使用的时候,使用具体的子类的对象作为实际参数进行操作。
  11. class 食物{
  12. }
  13. 汉堡、炸鸡、凉皮、米粉、米饭...
  14. class Person{
  15. public void eat(食物 sw){ //在声明形式参数的时候,使用的父类类型的引用变量
  16. }
  17. }
  18. Person p=new Person();
  19. p.eat(new 汉堡()); //实际在调用方法并传递实际参数的时候,使用的是子类的对象。
  20. p.eat(new 炸鸡());
  21. p.eat(new 凉皮());
  22. p.eat(new 米粉());
  23. 多态有什么弊端?
  24. 不能使用子类特有的成员。解决方案:向下造型。
  25. 多态的转型:
  26. 向上转型 向上造型:
  27. 父类的引用指向子类的对象,就是向上造型
  28. Animal a=new Cat();
  29. 向下转型 向下造型:
  30. 子类类型 对象名=(子类类型)父类引用;
  31. Cat c=(Cat)a; //强行把父类的对象转化为子类
  32. 向下转型存在的风险和解决方案:
  33. 风险:
  34. 向下转型会带来一定的风险,如果对应的实际类型和目标类型不是同一种类型,
  35. 那么在转换的时候就会出现异常:ClassCastException类型强制转换异常
  36. 解决方案:
  37. 使用一个关键字 instanceof
  38. 使用的格式:
  39. 变量名(对象名) instanceof 类型
  40. 判断关键字左边的对象名,是不是右边的类型,如果是返回true,否则返回false。
  41. if(c instanceof Cat){
  42. Cat c=(Cat)a;
  43. }