现实中多态:多态在现实里面也是经常出现的,如下多态的例子:
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,包装类,时间类...