java基础之多态

一、什么是多态?
        现实中多态:多态在现实里面也是经常出现的,如下多态的例子:
        a)上学的时候,儿子找老爸买【手机】来【玩】,老爸承诺过年给你买手机(没说具体的品牌),等到过年的时候,你收到iphone或是红米手机,你都得要,
        但是如果最开始说给你买苹果,那么收到其他手机,你就不会接受
        -->需求:儿子玩手机(iphone,红米...)
        b)儿子找老爸买【枪】来【玩】,老爸给儿子小明承诺要买枪,用来玩,没有说明具体的什么枪,到时候老爸买枪把枪给儿子的可选择性很大,水枪,火药枪,气枪,仿真枪..都可以
        -->需求:儿子玩枪(水枪,火药枪,气枪,仿真枪,真枪)
       JAVA发生多态的条件-语法
        作用--》超类型的引用(指向各子类型的对象-调用子类型对象重写的方法)
        原因--》编译看引用类型,运行看对象类型
        a)超类型(父类,父接口,实现接口)的引用    指向    子类型的对象
        b)子类型重写超类型方法
        c)超类型(父类,父接口,实现接口)的引用调用了子类型重写的(方法)

        执行的方法看对象

 多态:polymorphism:
            (编译看类型,运行看对象)编译时采用超类型变量接受引用,运行时看引用指向具体的对象来执行方法。
            ---》好处-》可以利用多态,面向超类型(父类,父接口)编程,统一规范子类型(功能)。
            --》所有的子类型都具有的类似的功能(功能名相同-实现不同)-》定义在继承链上--》利用多态调用子类型功能-》统一api。

二、finnal关键字

        1、final 关键字理解-->最终的,不希望别人改变的。
        2、final 关键字作用
            a)不希望定义的变量被重新赋值!如固定的数据如:Math.PI
            b)不希望子类重写已有的功能,认为该功能完美!
            c)不希望其他类继承某类,认为某类已经完美,不需要扩充,
            如:String 类,基本类型包装类,这些类功能固定没有扩充的必要    
        3.java存储 数据
            变量:定义一次,赋值多次
            常量:定义一次,赋值一次
        4.final-修饰-》变量--》常量
            语法:final 数据类型  常量名;        
        5.命名规范:
            类:多个单词组成,所有单词首字母大写,其他小写
            变量方法:多个单词组成,第二个单词开始首字母大写,其他小写
            常量:多个单词组成,所有字母大写,每个单词通过下划线分割-->PERSON_ID_CARD        
        a)局部变量  -》局部常量
        ------------------------    
        b)成员变量  -》成员常量
        c)静态变量  -》静态常量        
        6.注意点:
            1)成员常量和静态常量不会自动初始化值
            2)必须手动保证成员常量和静态常量有值
            3)手动为成员常量赋值:
                 a)定义就赋值
                 b)构造器赋值
            4)手动为静态常量赋值:
             a)定义就赋值
             b)静态块赋值--》jdbc之后说...

        2)final修饰成员方法
               作用:表示该方法功能已经完善,方法不能被重写
               例如:动物的呼吸功能
        3)finla修饰类
               作用:表示该类功能已经完善,类不能被继承

三、object类

obejct类:所有引用类型的超类型,定义了所有引用类型通用的功能--》obj类的实现:转换为完整类名+@+hacode 16进制整数 --》不满足我们需求--》需要重写
         1)toString:把【当前对象】转换为【字符串】,字符串用于描述对象的数据信息(成员变量)。
         2)hashcode
         3)equals

 toString 的注意点
       1)进行打印【对象】的时候--》会自动调用【对象】的toString功能
       System.out.println(对象);等价于 System.out.println(对象.toString);
       2)进行[字符串]+【对象】的拼接-》会自动调用【对象】的toString功能
        字符串+对象 等价于 字符串+对象.toString();

       3)使用Object的toString--》对象转字符串--》有重写toString

      4)使用Object的toString--》对象转字符串--》没有重写toString  
      5) 使用obj的实现:转换为 完整类名+@+hacode 16进制整数--》不满足我们需求

obejct类:所有引用类型的超类型,定义了所有引用类型通用的功能
       1)toString:把【当前对象】转换为【字符串】,字符串用于描述对象的数据信息(成员变量)。
       obj类的实现:转换为  完整类名+@+hacode 16进--》不满足我们需求--》需要重写
        2)hashcode:把【当前对象】转换为【哈希整数】,如果两个对象,【内容相同】,那么生成的【哈希整数】必须相同
         --》作用:根据生成的整数可以判断对象的【内容是否相同】
         obj类的实现:由【对象的地址】生成的整数,用于判断是否同一个对象。--》不满足我们需求--》需要重写
         3)equals:比较两个对象(this和传入对象)是否【内容相同】
        obj类的实现:比较两个对象的【地址】是否相同,相同返回true,否则false。--》不满足我们需求--》需要重写    
         equals和hashcode 的【内容相同】的标准要一致,(同时重写)--》系统的常用类都实现了equals hashcode-并满足对应的规范要求--》例如:String,包装类,时间类...


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值