final关键字:最终的
常量:定义一次,赋值一次
变量:定义一次,赋值多次
常量的类型
1)基本类型:常量本身存储的值(业务数据)不能更改
2)引用类型:常量本身存储的值(对象的地址)不能更改,对象的内容可以更改的。
a)修饰变量---》常量
1)局部常量
方法的参数(局部常量):在方法中不能赋值,因为调用的时候已经赋值。
2)成员常量
没有默认值,必须创建对象保证所有的成员常量都有默认值
a)定义及赋值 b)构造块 c)构造器
3)静态常量
没有默认值,必须加载类之后保证所有的静态常量都有默认值
a)定义及赋值 c)静态块
b)修饰方法
作用:防止父类的方法被子类重写
c)修饰类
作用:防止类被继承
object常用重写方法
a)toString:把当前对象转换为字符串
obj的toString-字符串格式:完整类名[email protected]+hashcode16进制形式
通常该字符串不满足需求-不能明确的表示出对象的内容==》需要重写
具体表示出对象的那些成员变量---》需求决定
b)hashcode:把当前对象转换为整数
规范:如果两个对象的【内容相同】,那么他们生成的整数也要相同
obj的hashcode的【内容相同】指的是地址相同,其整数由对象地址生成。
业务里【内容相同】通常是由对象成员变量决定,所以--》需要重写
具体通过对象的那些成员变量来决定【内容相同】---》需求决定
c)equals:把当前对象和另一个对象进行比较,内容相同则返回true,否则false
obj的equals的【内容相同】:比较的是对象的地址
需要重写!!
hashcode和equals都是判断对象内容相同!!!
那么我们需要同时重写
引用类型的类型转换
a)自动类型转换
超类型 引用变量=子类型的值;
b)强制类型转换
子类型 引用变量=(子类型)超类型的值;
注意点
1)类型要成功的转换,那么一种类型的值(对象的类型)必须【是】另一种类型
2)强制类型转换:两个类型之间必须有关系(继承,实现)--》否则编译通不过
3)在运行的时候如果类型之间不能转换--报错--》ClassCastException
4)instanceof关键字--》检查类型直接是否可以转换
多态-面向超类型编程
语法:
1)超类型的引用 指向 子类型的对象
2)子类型 重写 超类型的方法
3)超类型的引用 调用 子类型 重写的方法
3)超类型的引用 调用 子类型 重写的方法
子类型中可以访问父类的被重写方法,也有访问自己的重写方法
--》怎么调用?
java引用调用方法
a)编译看-》引用类型
b)运行看-》对象类型
面向超类型编程
1)给多个具体类定义一个超类型---》可以接受各具体类的对象
2)在超类型中定义具体类用的统一的功能
3)利用多态超类型引用调用统一的功能
super关键字
super和this对比
1)super和this指向的对象--》当前对象
2)super和this调用资源(属性和方法),查找过程不一样
a)super从当前类的父类依次往继承链找对应的(属性和方法),找到即调用
b)this从当前类依次往继承链找对应的(属性和方法),找到即调用
super的作用
1)调用父类(继承链)被重写的方法
2)调用父类(继承链)被重名的属性(基本不用)
3)super([父类的构造器参数])---》调用父类的指定构造器
语法:
1)必须是构造器中
2)必须是第一行代码
this([当前类的构造器参数])---》调用自己的指定构造器
语法:
1)必须是构造器中
2)必须是第一行代码
注意点
1)super()和this()都必须是第一句,所以不能同时使用
2)子类构造器如果没有显示的编写super([父类的构造器参数]),那么默认加入super(),调用父类空构造器