面向对象基础篇 -- 类的继承

何为继承?

将已有类的所有共同特有属性提取出来,专门在写一个类,让其它类通过继承这个类来加载自己的属性

类的继承,不仅要在代码上可行,也要在人的认知方面可行

比如:Student类可以继承Person类中的部分属性例如 age ,gender, name 等等,Employee类也可以继承Person中的这些属性。

同时虽然一个Dog类中的每个对象也有,age,gender ,name,但是不继承Person类,虽然他在代码层次可行,但是不符合人的认知

如何继承?

通过 extends 关键字来实现类的继承

//例如:
//父类,也称基类,超类
class Father{
    String name ;
    int age ;
    char gender ;
}
//子类
class Son extends Father{
    
}
//此时我们虽然在son类中没有定义name,age,gender属性,但是Son其实已经继承了父类的这些属性

Son son = new Son();
System.out.println(son.age);
//输出 0 ,因为age 是int类型的,最终初始化为0;

子父类成员变量的特点:

  • 属性存储位置,加载顺序

子类对象在创建的时候
堆内存中对象的空间里
(1)先对子类对象的成员变量进行创建并默认初始化
(2)再对父类的成员变量进行创建并默认初始化-在对象空间中的super空间里
(3)对应子类的构造函数进栈-执行显示初始化(子类父类的成员变量都显示初始化)

  • 调用对象属性时的查找过程

    函数外部时:

子类成员变量 – 子类静态变量 – 父类成员变量

​ 函数内部时:

函数局部变量 – 子类成员变量 – 子类静态变量 – 父类成员变量

​ 当含有super关键字时:

直接在super空间中寻找

​ 当我们在

子父类中构造函数的特点

创建子类对象时,会先执行父类的构造函数,再执行子类的构造函数

这是因为:

在子类的构造函数中,如果没有通过this方法掉用其他构造函数,那么这个构造函数的内部默认第一句调用父类的构造函数

//例如:
class DemoFather{
    public DemoFather(){
        
    }
}
class Demo extends DemoFather{
    public Demo(){
        this("我调用了另一个构造函数!");
    }
    /*
    对于这个无参的构造函数,它的内部调用了这个类的另一个构造函数
    那此时它的第一句就是执行另一个构造函数。
    */
    public Demo(String s){
        //存在默认的 super();
        System.out.println(s);
    }
    /*
    对于这有参数的构造方法,因为内部没有调用其他的构造函数,
    此时它的默认第一句就是 super();
    即默认首先调用父类的构造函数
    */
}
  • 调用父类默认的构造函数,是否创建了一个父类对象?

并没有! 唯一的目的就是为了给子类即将继承的属性进行初始化(显示初始化-针对性初始化)

子父类中成员函数的特点:

  • 函数调用时的查找顺序

先在子类内部找,如果没有再去父类找

  • 子类重写父类方法
    • 情况:父类的行为不足以将子类的行为描述完全时,子类需要重写父类描述这个行为的方法
    • 要求:
      • 函数名必须一致
      • 返回值类型必须一致
      • 参数列表必须一致
      • 子类权限必须大于等于父类函数的权限

子父类中 静态成员的特点

  • 静态属性:

现在子类中寻找,如果没有,再去父类中寻找

  • 静态函数:

先在子类中寻找,如果没有,再去父类中寻找

特别的:

静态方法不存在重写问题!

绝对无法继承

当父类成员变量/属性通过private 关键字修饰时,子类无法继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值