JavaSE进阶01: 继承与抽象类

第一章节 - 继承

继承的概念

  • 问题归纳与知识点总结

    • 什么是继承?
      • 继承就是类与类之间产生一种关系,可以将类中重复的内容向上进行抽取.
    • 子类继承了父类之后会发生什么变化?
      • 子类继承了父类,可以使用父类除了私有/构造方法之外的所有内容.
    • 什么条件下才可以去使用继承?
      • is…a的关系 讲师是员工的一种/班主任是员工的一种.
      • 猫是汽车的一种 × 狗是员工的一种 ×
    • 继承的好处和弊端分别是什么?
      • 好处

        • 1.提高了代码的复用性
          
          2.是多态的前提条件[明后天]
          
      • 弊端

        • 1.继承是侵入性的 -> 子类只要继承了继承,就必须全部继承,不可以进行选择.
          
          2.继承也提高了代码的耦合性.
          
  • 继承中的格式与代码体现 [JDK15新特性(可选继承)]
    • 问题归纳与知识点总结

      • 继承的格式是什么?
        • public class 子类名 extends 父类名
          
      • 父类的成员变量是私有的,子类可以继承吗? 子类可以访问吗?
        • 子类是可以继承的私有内容的,但是子类不可以访问父类的私有内容的.
      • 可选继承(只是拓展内容,因为大部分的公司还在用JDK8(LTS长更新版本))
        • public sealed class 父类名 permits 指定子类名 -> 非指定的子类是不可以继承的.
          
    • 课堂练习

      • 1.定义猫类Cat 狗类Dog 
        2.定义父类Animal 成员变量:String name/int age 成员方法withPeople(),在方法中输出陪伴人类.
        3.使Cat类和Dog继承Animal类.
        4.定义测试类创建Cat和Dog类的对象并赋值,打印成员变量后,调用withPeople()方法.
        这只猫的名字叫:花花 年龄:2岁
        这种狗的名字叫:大黄 年龄:5岁
        
  • 继承中成员变量的访问特点
    • 问题归纳与知识点总结

      • 继承后子类的方法访问变量的顺序是什么?
        • 就近原则 -> 谁离的近,就访问谁.
      • 方法内部访问变量名 / this访问变量名 / super访问变量名的顺序是什么?
        • 方法中访问变量名

          • 1.先查看当前方法中是否有局部变量 -> 有局部变量,直接访问局部变量就可以 [就近原则]
            
            2.如果说局部变量中没有呢 -> 就去会子类的成员变量位置寻找,如果有就访问.
            
            3.如果子类的成员变量中也没有呢 -> 就去去父类的成员变量位置寻找,如果有就访问.
            
        • 使用this访问变量名

          • 1.先去子类的成员变量位置寻找 -> 如果有就访问
            
            2.如果子类的成员位置没有 -> 就去父类的成员位置寻找.
            
        • 使用super访问变量名

          • 1.直接去父类的成员变量位置进行寻找 -> 如果有就访问,如果没有就[再尝试去父类的父类进行访问(不过多讨论)]
            
      • this表示什么? super表示什么?
        • this表示本类对象的引用 super表示父类对象的引用.
  • 继承中成员方法的访问特点
    • 问题归纳与知识点总结

      • 继承后子类对象访问成员方法的顺序是什么?
        • 子类对象可以直接调用继承到的父类中的方法.
        • 如果子类中有,则使用子类的成员方法,如果子类中没有,则使用父类的成员方法.
          • 如果在子类和父类出现同名方法的时候,想访问父类的方法,则可以使用super.方法名();来对父类的方法进行访问.
  • 方法重写的概念与特点
    • 问题归纳与知识点总结

      • 什么是方法重写? 为什么会出现方法重写?
        • 子类和父类中出现了方法名称相同/参数列表相同(方法声明完全一致)的方法.
        • 因为父类的方法不能满足子类现有的需求,子类可以针对于父类的方法进行重写(增强).
    • 方法重写有什么特点?
    • 方法重写的形式是什么?
      • 在子类中也定义相同的方法.
    • 方法重写的快捷方式是什么?
      • Ctrl + O

      • 如何校验子类的方法是重写父类的而不是自己独有的?
        • 在方法上添加一个注解@Override
          • @Override -> 注解 当前被这个注解标注的方法是否是一个有效的方法重写.注解是IDEA自动帮我们补充上的,即便不写,重写的方法只要符合规范,依然是一个方法重写.
      • 方法重写与方法重载的区别是什么? 一毛钱关系没有.
        • 方法重载:在同一个类中,方法名相同,参数列表不同的方法构成方法重载. (和返回值无关)
        • 方法重写:在子类关系中,出现了方法声明一致的方法.
      • 方法重写的规则是什么? [补充]
        • 方法名称相同/参数列表相同 -> 必须一模一样的.
          
          重写方法的时候有一些内容可以不一样,但是一切的前提符合规范:
              (1).public权限修饰符 public > protected > 默认(不写) > private
              子类重写方法权限必须大于等于父类方法的权限.
          
              (2).子类重写方法的返回值可以和父类不一样.
                  -如果父类方法的返回值void,则子类重写方法的返回值也必须是void.
                  -如果父类方法的返回值是一个具体的类,子类方法的返回值可以是父类方法返回值的子类.
               Animal的子类Cat 
               class Fu{
               	public Animal getAnimal(){
               	
               	}
               } 
               Zi extends Fu {
               	@Override
               	public Cat getAnimal(){
               	
               	}
               }
          
              (3).子类的重写方法不可以抛出比父类方法级别更高的异常,父类方法不抛异常,子类重写方法也不允许抛异常(暂时说明)
          
  • 手机类案例

    1.老款手机: 打电话,发短信,显示来电(只显示电话号码)
    2.新款手机: 打电话,发短信,显示来电(显示电话号码,显示头像,显示位置)
    
    画图分析

在这里插入图片描述

代码实现
  • 课堂练习

    1.新建一个包,复制猫与狗练习中的三个类到新包下.
    2.Cat类和Dog类重写withPeople()方法.
    Cat类在方法中输出:猫咪可以陪伴人类玩耍,
    Dog类在方法中输出:狗可以为主人看家护院.
    3.定义测试类创建Cat和Dog类的对象并Set方法赋值,打印成员变量后,调用withPeople()方法.
    
  • 继承中构造方法的访问特点
    • 问题归纳与知识点总结

      • 继承中构造方法访问的特点是什么?
        • 子类不可以继承父类的构造方法,但是子类可以调用父类的构造方法.
      • 为什么要先加载父类的构造方法?
        • 没有父亲就是没有儿子,没有父类对象就没有子类对象.
      • 因为父类对象在初始化之后,子类就可以访问到父类中的数据了.

      • 每个类的构造方法第一条语句默认是什么?
        • 是super(); 调用父类的无参构造方法,来初始化父类对象.
      • 为什么可以不加super()?
        • 系统会默认加在第一行 -> 哪怕你忘了写,也不会影响创建.
      • super()可以不在第一条语句而在构造方法中的其他代码后面执行吗?
        • 不可以 -> super();必须在第一行.
  • Java中继承的特点
    • 问题归纳与知识点总结

      • Java中可以多继承吗? 一个子类可以有多个父类吗?
        • Java中只允许单继承,不允许多继承.(接口除外)
          • 如果可以多继承,那么假如说多个父类中存在同名方法,那么子类就不知道到底调用哪个方法了.
      • 如果不可以多继承,那么可以使用什么方式来完成多继承的目的?
        • 多重继承(虽然可以达到目的,但是会破坏继承的模型) 并不推荐,学习接口来解决这个问题.

第二章节 - 抽象类

  • 抽象方法的概念以及抽象方法存在的意义

    • 问题归纳与知识点总结

      • 什么是抽象方法?
        • 当父类中抽取出来的共性内容/方法没办法给出具体的实现逻辑的时候,就可以将这个方法封装为抽象方法 -> 没有方法体的方法.
      • 抽象方法为什么会存在?
        • 父类没办法给出具体的实现逻辑,但每个子类都有自己的实现方式.
      • 抽象类的定义格式/抽象方法的定义格式?
        • 抽象方法的定义格式

          • 和正常的方法大部分都是一样的 返回值类型/方法名/方法参数.
            
            

          1.抽象方法都通过关键字abstract修饰的 2.抽象方法没有方法体,没有{}.

        • 抽象类的定义格式

          • 和正常的类没有区别,但是抽象类中可以定义抽象方法 -> 抽象方法必须在抽象类中.
            
            public abstract 类名 {}
            
      • 抽象类的使用
        • 什么是抽象类?
          • 抽象类和正常类在定义的方式上没有太大的区别,当一个类中有抽象方法的时候,那么这个类就必须是一个抽象类.
          • 抽象类就是为了给抽象方法提供存活空间的.
        • 抽象类有什么使用限制?
          • 抽象类不可以实例化 -> 抽象类不能够创建对象.
      • 抽象类的常见问题[面试]
        • 抽象类可以实例化吗?
          • 抽象类不可以实例化,因为即便可以实例化,那么调用抽象方法的时候没有具体的方法逻辑.
        • 抽象类中可以有哪些组成部分?
          • 抽象类中可以有成员变量 + 成员方法(抽象方法/非抽象方法) + 构造方法.
        • 抽象类中可以有构造方法吗?
          • 可以有 -> 构造方法是为了初始化参数用的 -> 让子类的构造方法进行访问.
        • 抽象类中可以没有抽象方法吗?
          • 可以.
        • 抽象方法可以不在抽象类中吗?
          • 抽象方法必须在抽象类中.
    • 课堂练习

      • 1.新建一个包,复制猫与狗练习中的三个类到新包下.
        2.将Animal类中的withPeople()方法修改为抽象方法,并在Cat类和Dog中增强.
        3.定义测试类创建Cat和Dog类的对象使用有参构造赋值,打印成员变量后,调用withPeople()方法.
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值