小言_互联网的博客

Java基础(多态的理解与应用)

302人阅读  评论(0)

1.多态概述

  1. 多态是继封装、继承之后,面向对象的第三大特性。

  2. 多态现实意义理解:

  • 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是,即出现两种形态。                                                                                                            

  • Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

     3.多态体现为父类引用变量可以指向子类对象

     4.前提条件:必须有子父类关系。

    注意:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

     5.多态的定义与使用格式

                   定义格式:父类类型 变量名=new 子类类型();

     6.理解:

               多态是同一个行为具有多个不同表现形式或形态的能力。

               多态就是同一个接口,使用不同的实例而执行不同操作。

2.多态中成员的特点

  1. 多态成员变量:编译运行看左边

         Fu f=new Zi();

         System.out.println(f.num);//f是Fu中的值,只能取到父中的值

     2.多态成员方法:编译看左边,运行看右边

        Fu f1=new Zi();

        System.out.println(f1.show());//f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。

3.instanceof关键字

     作用:用来判断某个对象是否属于某种数据类型。

  •     注意: 返回类型为布尔类型

    使用案例:


  
  1. Fu f1= new Zi();
  2. Fu f2= new Son();
  3. if(f1 instanceof Zi){
  4. System.out.println( "f1是Zi的类型");
  5. }
  6. else{
  7. System.out.println( "f1是Son的类型");
  8. }

4.多态的转型  

  •     多态的转型分为向上转型和向下转型两种
  • 向上转型:多态本身就是向上转型过的过程

          使用格式:父类类型 变量名=new 子类类型();

          适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

  • 向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型

          使用格式:子类类型 变量名=(子类类型) 父类类型的变量;

         适用场景:当要使用子类特有功能时。

5.多态案例:

例1:(理解多态,可以重点看这个案例


  
  1. package day0524;
  2. public class demo04 {
  3. public static void main(String[] args) {
  4. People p= new Stu();
  5. p.eat();
  6. //调用特有的方法
  7. Stu s=(Stu)p;
  8. s.study();
  9. //((Stu) p).study();
  10. }
  11. }
  12. class People{
  13. public void eat(){
  14. System.out.println( "吃饭");
  15. }
  16. }
  17. class Stu extends People{
  18. @Override
  19. public void eat(){
  20. System.out.println( "吃水煮肉片");
  21. }
  22. public void study(){
  23. System.out.println( "好好学习");
  24. }
  25. }
  26. class Teachers extends People{
  27. @Override
  28. public void eat(){
  29. System.out.println( "吃樱桃");
  30. }
  31. public void teach(){
  32. System.out.println( "认真授课");
  33. }
  34. }

例2:

请问题目运行结果是什么?


  
  1. package day0524;
  2. public class demo1 {
  3. public static void main(String[] args) {
  4. A a= new A();
  5. a.show();
  6. B b= new B();
  7. b.show();
  8. }
  9. }
  10. class A{
  11. public void show(){
  12. show2();
  13. }
  14. public void show2(){
  15. System.out.println( "A");
  16. }
  17. }
  18. class B extends A{
  19. public void show2(){
  20. System.out.println( "B");
  21. }
  22. }
  23. class C extends B{
  24. public void show(){
  25. super.show();
  26. }
  27. public void show2(){
  28. System.out.println( "C");
  29. }
  30. }

 

答案:A B

 


转载:https://blog.csdn.net/qq_41679818/article/details/90523285
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场