Javase day12天

第十二天课堂笔记

访问权限★★★

  • 类的访问权限

    • 公共类 public
    • 非公共类 : 只能在当前包下使用
  • 成员的访问权限

    • 包括成员变量,成员方法,成员内部类…

    • 范围从小到大 : private << 默认的 << protected << public

      image-20240325135615580

  • 重写的规则

    • 子类重写父类方法时,子类不能缩小父类的访问权限
    • 返回值类型: 通常情况下保持一致
      • 当父类方法返回值类型为引用数据类型时,子类重写方法的返回值类型可以相同,也可以为 父类方法返回值类型 对应 的 子类类型

final关键字

  • final关键字修饰类: 该类为最终类, => 不能被继承

  • final关键字修饰方法: 该方法为最终方法, => 不能被重写

  • final关键字修饰属性 : 该属性为常量 , 常量名建议全部大写,下划线分隔

    • 常量的两种赋值方式
      • 在声明的时候直接赋值
      • 在构造方法中赋值
    • static final通常联合使用,构成静态常量,节省空间
  • final关键字修饰局部变量

    • 常数值只能完成一次赋值,否则编译错误

    • 当new一个对象为常量,

      • 那么他的对象名就不能再被赋值,即对象存储索引值不能被更改
      • 但是该对象里面的实例变量作为变量,依旧可以被再次赋值

      image-20240325104501541

    • 实例代码如下:

      	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 多个父类类型的子类对象

    image-20240325140228021

  • 好处:在继承的基础上继续优化代码,减少代码的冗余性

  • 多态使用场景 : 都是为了构成多态的语法格式 父类类型 对象名 = new 子类();

    • 将父类作为方法的形参 : public void feed(Pet pet){} , 其中调用的方法实参为new 子类()
    • 将父类作为返回值类型 public Pet judge(string s){} , 其中返回值 ,return new 子类()
  • 多态中的两种类型转换

    • 向上转型(自动类型转换) : 构成多态的过程 , 由子到父

    • 向下转型(强制类型转换)

      • 父类类型的子类对象 去访问 子类独有的实例变量和实例方法

      • 由父到子

      • 子类类型 对象名 = (子类型类) 父类类型的子类对象名

      • 向下转型 只能向 父类类型的子类对象 所对应的 子类对象 转型 , 否则会报Java.long.classCastException类型转换异常

        image-20240325145954653

      • 使用 instanceof 关键字 先判断 再向下转型 解决类型转换异常

        image-20240325153442148

      • 更改版

        image-20240325154252228

抽象类和抽象方法★★★

  • 抽象类

    • abstract关键字
    • 抽象类必须不能创建对象 : 抽象类是多态的一种形式,创建父类类型的子类对象 , 那么调用方法会优先执行对象类型的子类对象 重写后的方法

    image-20240325164950653

  • 抽象方法

    • 父类的方法体使用不到时
    • 抽象方法必须使用abstract关键字
    • 抽象方法必须没有方法体
    • 抽象方法必须在抽象类中
    • 子类继承抽象类,必须重写抽象类中所有的抽象方法 , 否则子类也是抽象类

象方法

  • 父类的方法体使用不到时
  • 抽象方法必须使用abstract关键字
  • 抽象方法必须没有方法体
  • 抽象方法必须在抽象类中
  • 子类继承抽象类,必须重写抽象类中所有的抽象方法 , 否则子类也是抽象类
  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值