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();             

            

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值