继承和多态

  • 使用继承重新定义类
    • 1. 继承的基本概念
      • 继承可以解决编程中代码冗余的问题是实现代码重用的重要手段之一\\\\继承是软件可重用性的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种现象或行为就是继承\\\\此时新类就是子类,现有的类是父类\\\\继承最基本的作用就是代码可重用性,增加软件的可扩充性\\\\java 类只支持单继承,每个类只能有一个父类
      • 语法
        • [ 访问修饰符 ] calss <SubClass> extends <SuperClass>{ }
      • 继承通过 extends 关键字实现,左边是子类,右边 是父类
      • 访问修饰符如果是 public ,那么该类在整个项目中可见\\\\如果不写访问修饰符,该类只在当前包中可见
      • 子类可以在父类中继承以下内容
        • 1. 可以继承 public 和 protected 修饰的属性和方法,不论子类和父类是否在同一个包里
        • 2. 可以继承默认访问修饰符的属性和方法,但是子类和父类必须在同一包中
        • 3. 无法继承父类的构造方法
    • 2. 继承的应用
      • 示例\\\\使用继承,将 8 个部门类中相同的代码抽取一个 “ 部门类 ”

  • 使用继承和重写完善类的结构
    • 1. 使用继承和重写实现类及子类
      • extends 关键字建立继承关系
      • super 关键字调用父类成员
      • 1. 使用继承定义部门类及子类
      • 2. 使用 super 关键字调用父类成员
        • 父类中公共的属性和方法都会被子类继承
        • 语法
          • 访问父类构造方法:super ( 参数 )\\\\访问父类属性 / 方法:super < 父类属性 / 方法 >\\\\访问父类普通方法:super . 方法名
        • super 只能出现在子类 ( 子类的方法和构造方法 ) 中,而不是其他位置\\\\super 用于访问父类的成员,如父类的属性、方法、构造方法\\\\具有访问权限的限制,如无法通过 super 访问父类的 private 成员
      • 3. 实例化子类对象
        • 在 Java 中,一个类的构造方法在如下两种情况下总会被执行
          • 创建该类的对象( 实例化 )
          • 创建该类的子类的对象( 子类的实例化 )
        • 子类在实例化时,会首先执行其父类的构造方法,然后才执行子类的构造方法\\\\在创建一个对象时,会按照父类——子类的顺序执行一系列的构造方法
        • 调用规则
          • 如果子类的构造方法中没有通过 super 显式调用父类的有参构造方法,也没有通过 this 显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法

          • 如果子类的构造方法中通过 super 显式地调用了父类的有参构造方法,那么将执行父类相应的构造方法

          • 如果子类的构造方法中通过 this 显式地调用了自身地其他构造方法,在相应的构造方法中遵循以上两条规则
          • 如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类传递,一直到执行顶级父类 Objet 类的无参构造方法为止
      • 4. Object 类

        • Object 类是所有类的父类
        • 所有的 Java 类都直接或间接地继承了 java.lang.Object 类
        • 在定义一个类时,没有使用 extends 关键字,也就是没有显示地继承某个类,那么这个类直接继承 Object 类。所有对象都继承这个类的方法
        • Object 类定义了大量地可被其他类继承的方法
    • 2. 方法重写
      • 如果从父类继承的方法不能满足子类地需求,可以在子类中对父类地同名方法进行重写 ( 覆盖 )
      • 在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或方法的覆盖
      • 方法重写必须满足一下需求
        • 重写方法和被重写方法必须具有相同的方法名
        • 重写方法和被重写方法必须具有相同的参数列表
        • 重写方法的返回值类型必须和被重写方法的返回值类型相同
        • 重写方法不能缩小被重写方法的访问权限
      • 重写方法步骤
        • 存在继承
        • 重写父类方法
      • 重载(Overloading)和重写(Overriding)的区别
        • 重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关
        • 重写涉及的是子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同

        • 构造方法不能被重写
  • 多态
    • 向上转型完成多态\\\\向下转型完成调用子类方法\\\\转型前使用 instanceof 判断
    • 1. 实现多态
      • 父类的引用指向子类的实现就是多态
      • 同一个引用类型,使用不同的实例而执行不同操作
      • 认识多态
        • 它意味着一个特定类型的变量可以引用不同类型的对象,并且能自动地调用引用的对象的方法,也就是根据作用到的不同对象类型,响应不同的操作。方法的重写时实现多态的基础
        • 多态意味着在一次方法调用中根据包含的对象的实际类型 ( 即实际的子类对象 ),来决定应该调用哪个方法,而不是由用来存储对象引用的变量的类型决定的\\\\当调用一个方法时,为了实现多态的操作,这个方法既是在父类中声明过的,也必须实在子类中重写过的方法
        • 抽象类不能被实例化\\\\子类如果不是抽象类,则必须重写抽象类中的全部抽象方法\\\\abstract 修饰符不能和 final 修饰符一起使用\\\\abstract 修饰符的抽象方法没有方法体\\\\private 关键字不能用来修饰抽象方法
      • 2. 向上转型
        • 子类向父类的转换称为向上转型
        • 语法
          • < 父类型 > < 引用变量名 > = new < 子类型 >()
        • 子类转父类规则
          • 将一个父类的引用指向一个子类对象称为向上转型,系统会自动进行类型转换
          • 此时通过父类引用变量调用的方法是子类覆盖或继承了父类的方法,不是父类的方法
          • 此时通过父类引用变量无法调用子类特有的方法
      • 3. 向下转型
        • 讲一个指向子类对象的父类引用赋给一个子类的引用,即将父类类型转换为子类类型,称为向下转型,此时必须进行强制类型转换
        • 语法
          • < 子类型 > < 引用变量名 > = ( < 子类型 > ) < 父类型的引用变量 >
      • 4. instanceof 运算符
        • 在向下转型的过程中,如果不是转换为真实子类类型,会出现类型转换异常
        • 用 instanceof 运算符来进行判断当前对象是否属于某个类
        • 使用 instanceof 时,对象的类型必须和 instanceof 后面的参数所指定的类有继承关系,否则会出现编译错误
    • 多态的应用
      • 多态的优势
        • 可替换性:多态对已发生的代码具有可替换性
        • 可扩充性:多态对代码具有可扩充性
        • 接口性:多态时父类向子类提供了一个共同接口,由子类来具体实现
        • 灵活性:多态在应用中体现了灵活多样的操作,提高了使用效率
        • 简化性:多态简化了应用软件的代码编程和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要
      • 1. 使用父类作为方法的形参,是实现和使用多态的主要方式
      • 2. 使用父类作为方法的返回值,也是实现和使用多态的主要方式
    • 抽象方法
      • 抽象方法没有方法体
      • 抽象方法必须在抽象类中
      • 抽象方法必须在子类中被实现,除非子类是抽象类
    • 抽象类
      • 抽象类不是必须要有抽象方法
      • 抽象类中可以有普通方法
      • 抽象类不可以被实例化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值