第十二天课堂笔记
访问权限★★★
-
类的访问权限
- 公共类 public
- 非公共类 : 只能在当前包下使用
-
成员的访问权限
-
包括成员变量,成员方法,成员内部类…
-
范围从小到大 : private << 默认的 << protected << public
-
-
重写的规则
- 子类重写父类方法时,子类不能缩小父类的访问权限
- 返回值类型: 通常情况下保持一致
- 当父类方法返回值类型为引用数据类型时,子类重写方法的返回值类型可以相同,也可以为 父类方法返回值类型 对应 的 子类类型
final关键字
-
final关键字修饰类: 该类为最终类, => 不能被继承
-
final关键字修饰方法: 该方法为最终方法, => 不能被重写
-
final关键字修饰属性 : 该属性为常量 , 常量名建议全部大写,下划线分隔
- 常量的两种赋值方式
- 在声明的时候直接赋值
- 在构造方法中赋值
- static final通常联合使用,构成静态常量,节省空间
- 常量的两种赋值方式
-
final关键字修饰局部变量
-
常数值只能完成一次赋值,否则编译错误
-
当new一个对象为常量,
- 那么他的对象名就不能再被赋值,即对象存储索引值不能被更改
- 但是该对象里面的实例变量作为变量,依旧可以被再次赋值
-
实例代码如下:
public static void main(String[] args) { // 测试final关键字修饰对象赋值问题 // new dog :并将Dog对象在堆区中开辟的空间的内存地址值 赋值给 Dog类型常量dog final Dog dog = new Dog(); // 那么现在再次给Dog类型常量dog赋值,会编译错误 // dog = new Dog(); //Cannot assign a value to final variable 'dog' // 但是, new Dog()对象内的实例变量 name , age 作为变量值,修改后只会覆盖对象空间对应的值,不会更改对象在堆区空间中的内存地址值 , 故可以给对象中的实例变量赋值 dog.name = "贺加贝"; dog.age = 2; }
-
多态★★★★
-
语法格式: 父类类型 对象名 = new 子类();
-
该 对象名 只能访问 父类公共的实例变量和实例方法 , 但是实例方法会优先访问 当前 子类对象重写以后 的方法
-
多态即 多种形态 : 多个对象 , 调用同一个方法 , 得到多个不一样的结果
-
前提
- 子类必须继承父类
- 子类必须重写父类方法
- new 多个父类类型的子类对象
-
好处:在继承的基础上继续优化代码,减少代码的冗余性
-
多态使用场景 : 都是为了构成多态的语法格式 父类类型 对象名 = new 子类();
- 将父类作为方法的形参 : public void feed(Pet pet){} , 其中调用的方法实参为new 子类()
- 将父类作为返回值类型 public Pet judge(string s){} , 其中返回值 ,return new 子类()
-
多态中的两种类型转换
-
向上转型(自动类型转换) : 构成多态的过程 , 由子到父
-
向下转型(强制类型转换)
-
父类类型的子类对象 去访问 子类独有的实例变量和实例方法
-
由父到子
-
子类类型 对象名 = (子类型类) 父类类型的子类对象名
-
向下转型 只能向 父类类型的子类对象 所对应的 子类对象 转型 , 否则会报Java.long.classCastException类型转换异常
-
使用 instanceof 关键字 先判断 再向下转型 解决类型转换异常
-
更改版
-
-
抽象类和抽象方法★★★
-
抽象类
- abstract关键字
- 抽象类必须不能创建对象 : 抽象类是多态的一种形式,创建父类类型的子类对象 , 那么调用方法会优先执行对象类型的子类对象 重写后的方法
-
抽象方法
- 父类的方法体使用不到时
- 抽象方法必须使用abstract关键字
- 抽象方法必须没有方法体
- 抽象方法必须在抽象类中
- 子类继承抽象类,必须重写抽象类中所有的抽象方法 , 否则子类也是抽象类
象方法
- 父类的方法体使用不到时
- 抽象方法必须使用abstract关键字
- 抽象方法必须没有方法体
- 抽象方法必须在抽象类中
- 子类继承抽象类,必须重写抽象类中所有的抽象方法 , 否则子类也是抽象类