• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
卡苏米
博客园    首页    新随笔    联系   管理    订阅  订阅

笔记总结八

总结笔记八

01-继承介绍

  • 面向对象三大特征(封装、继承、多态)

    • 封装:隐藏实现细节,仅对外暴露公共的访问方式

    • 继承:让类与类之间产生关系(子父类关系),子类就可以直接使用父类中非私有的成员

  • 实现继承的格式:

    • extends

    • public class Zi extends Fu {}

    • Zi : 子类(派生类)

    • Fu:父类(基类,超类)

  • 继承的使用场景:

    • 分析需求的时候,发现多个类中存在共性的内容(相同),并且还产生了一种 is...a 的关系,就可以考虑使用继承来优化代码

    • 优点:

      • 提高了代码的复用性

      • 提高了代码的维护性

      • (让类与类之间产生了关系,是多态的前提)

    • 缺点:

      • 代码的耦合性增强了,类与类之间的关系过于紧密

02-继承中成员的访问特点 - 成员变量

  • 问题: 如果子父类中, 出现了重名的成员变量, 在使用的时候, 会使用谁 ?

  • 答案: 会根据就近原则, 优先使用子类的成员变量

  • 注意:非要使用父类的成员,可以使用super关键字进行区分

class Fu {
int num = 10;
}
​
class Zi extends Fu {
int num = 20;

public void method(){
int num = 30;

System.out.println(num);            // 30
System.out.println(super.num);      // 10
System.out.println(this.num);       // 20
}
}

03-继承中成员的访问特点 - 成员方法

  • 问题:在子类继承了父类之后,是否可以自己继续编写方法?

  • 答案:可以

  • 问题:既然子类可以继续写方法,如果写的方法,跟父类重名了,会使用谁的方法逻辑?

  • 答案:子类的方法逻辑,但是这里并不是就近原则,而是子类的方法,对父类的方法进行重写!

04-方法重写 Override

  • 概念:在继承体系中,子类出现了和父类中,方法声明一模一样的方法,就是子类对父类的方法进行了重写(方法的覆盖)

    • 方法声明:方法名,参数,返回值

  • 问题:子类什么时候需要对父类的方法进行重写?

    • 子类需要父类的方法,但是还不想完全继承父类的逻辑,而是想做一些修改,就可以重写

    • 子类需要父类的方法,觉得父类的方法逻辑不好,我要改改.

  • 方法重写注意事项:

    • 父类中 private 修饰的方法子类不能重写

    • 子类重写父类方法的时候,访问权限需要大于等于父类,最好就一致

  • 权限修饰符:

    • private:同一个类中

    • 默认的:同一个类中,同一个包中

    • protected:同一个类中,同一个包中,不同包下子类当中

    • public:任意位置

05- Java 中继承的特点

  • Java 只支持单继承,不支持多继承,但是可以多层继承

 

06-继承中成员的访问特点 - 构造方法

  • 结论:构造方法不允许被继承,子类需要自己编写构造方法

public class Fu {
// 要求方法名和类名保持一致
public Fu (){

}
}
​
class Zi extends Fu {
// 假设构造方法允许继承,就不能跟类名保持一致
public Fu (){

}
}
  • 问题:子类在初始化之前,是否需要先完成父类的初始化?

    • 答案:需要,因为子类在初始化的过程中,很有可能要使用父类的数据,如果父类没有提前完成初始化,子类将无法使用这份数据

    public class Fu {
    int num = 10;
    }
    ​
    class Zi extends Fu{
    public Zi(){
    System.out.println(super.num);
    }
    }
  • 问题:子类是如何完成父类初始化的呢?

    • 问题:初始化一个对象,执行的是哪一个方法?

    • 答案:构造方法!

    • 结论:综合来看,子类只要有办法,访问到父类的构造方法,就能完成父类数据的初始化操作

  • 问题:子类是如何访问到父类的构造方法呢?

    • 在所有子类的构造方法中,都默认隐藏了一句话 super() 在访问父类的空参构造方法

 

  • 任务:

将Test1包下的代码, 必掌握
将Test2包下的代码, 必掌握

07-this和super

  • this : 调用本类成员

    • this.本类成员变量

    • this.本类成员方法();

    • this(); 调用本类构造方法

  • super : 调用父类成员

    • super.父类成员变量

    • super.父类成员方法()

    • super(); 调用父类构造方法

注意: this() 和 super() 都必须放在构造方法的第一行位置, 两者都在争夺第一行的位置, 所以, 二者不能共存

08-final 关键字

  • fianl表示最终的意思, 可以修饰 (方法, 类, 变量)

  • 方法 :

    • 不能被重写

  • 类 :

    • 不能被继承, 但是自己可以有父类

  • 变量 :

    • 就变成了常量, 只能被赋值一次

    • 常量的命名规范 :

      • 如果是一个单词, 所有字母大写

        MAX
      • 如果是多个单词, 所有字母大写, 中间需要使用下划线分割

        MAX_VALUE
    • 基本数据类型 :

      • 其数据值不能改变

    • 引用数据类型 :

      • 地址值不能改变

    • 成员变量 :

      • 赋值时机 :

        1. 在定义的时候直接赋值

        2. 在构造方法运行结束之前, 完成赋值

09-抽象类和抽象方法介绍

  • 思考的引入 :

    • 抽象类就是一个特殊的父类

    • 这个父类跟普通的父类有什么区别 ?

      • 抽象类中可以定义抽象方法,因此,想要清楚抽象类,必须先理解抽象方法!

  • 抽象方法:

    • 将共性的行为(方法)抽取到父类中之后,发现这个行为在父类中无法给出具体明确,而且这个方法还是强制要求子类去做的

      • 该方法,就应该改写为抽象方法

      • 抽象方法需要存活在抽象类当中

  • 定义格式:

    • 抽象方法和抽象类的定义格式:

    public abstract class Animal {
    public abstract void eat();
    }

     

10-抽象类注意事项

  • 抽象类不能实例化 (不能创建对象)

  • 抽象类中有构造方法

  • 抽象类中可以编写一般方法

  • 抽象类的子类:

    • 重写所有抽象方法

    • 将子类自己变成抽象类 (不推荐)

11-abstract关键字的冲突问题

  • final : 因为被abstract修饰的方法, 强制要求子类重写, 而被final修饰的方法, 子类不能重写, 二者冲突

  • private : 因为被abstract修饰的方法, 强制要求子类重写, 而被private修饰的方法, 子类不能重写, 二者冲突

  • static : 暂不解释, 就业班学

posted @ 2021-07-20 22:13  卡苏米  阅读(49)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3