栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中的多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中的多态

一、多态的定义:
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
在运行时,可以通过指向基类的引用,来调用实现派生类(子类)中的方法。

二:多态的好处:
使用多态,我们可以很好的完成代码的解耦和工作,加强代码的可扩展性,是代码更加灵活,在不改变原有接口方法的情况下简化流程等,总结一下就是:

减耦合
增强可以替换性
可扩展性
灵活性等…

从代码看,我们可以省去很多很多重载的方法。

三、实现多态的三个条件(前提条件,向上转型、向下转型):
1、继承的存在;(继承是多态的基础,没有继承就没有多态)
2、子类重写父类的方法。(多态下会调用子类重写后的方法)
3、父类引用变量指向子类对象。(涉及子类到父类的类型转换)
JAVA引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态(Polymorphism)。这和C++里的类似。

                                                                                                                                                                                                                                                

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

class BaseClass                   //父类 

{ 

      public int book =6;   

      public void base()    { 

          System.out.println("父类的普通方法");   

      }   

      public void test()    { 

          System.out.println("父类的被覆盖的方法");         

      }

} 

public class SubClass extends BaseClass { 

        //重新定义一个book实例属性覆盖父类的book实例属性         

        public String book = "Hello!";   

        public void test()   { 

            //也叫方法的重写或方法的覆盖

            System.out.println("子类覆盖父类的方法")         

        }   

        public void sub()    { 

            System.out.println("子类的普通方法");   

        }   

        //下面给出主方法的入口 

        public static void main(String[ ] args)   { 

            //下面编译时类型和运行时类型完全一样,因此不存在多态                   

            BaseClass   bc = new BaseClass();       

            //创建父类对象                   

            //输出6 

            System.out.println(bc.book);   

            //下面两次调用将执行BaseClass(父类)的方法                    

            bc.base();                    bc.test();   

            //下面编译时类型和运行时类型完全一样,因此不存在多态                    

            SubClass sc = new SubClass();        

            //创建子类对象                     

            //输出"Hello!" 

            System.out.println(sc.book);   

            //下面调用将执行从父类继承到的base方法                    

            sc.base();   

            //下面调用将执行从当前类的test方法                     

            sc.test();   

            //下面编译时类型和运行时类型不一样,多态发生                    

            BaseClass ploymophicBc = new SubClass();                    

            //输出6----表明访问的是父类属性 

            System.out.println(ploymophicBc.book);   

            //下面调用将执行从父类继承到的base方法                     

            ploymophicBc.base();   

            //下面调用将执行从当前类的test方法                     

            ploymophicBc.test();  

            //因为ploymophicBc的编译类型是BaseClass,BaseClass 类没有提供资金SUBYYIF 

            //所以下面代码编译时会出现错误                    

            //ploymophicBc.sub();             

            } 

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/962757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号