java_extends继承方面总结

继承
1.使用继承的好处?
我们定义多个类,多个类中都有一些相同的内容!=====>>> 将相同的内容向上抽取,定义到一个父类中!【提高代码的复用性!】

2.继承的核心思想=====>>> 共性抽取!

3.如何定义2个类,让其成为继承关系?
先定义一个类:Employee(员工类)
再定义另外一个类:BanZhuRen(班主任类<工号、姓名、班级管理的能力>);
还可以有其它的类:Teacher(讲师类<工号、姓名、讲课的能力>);

我们可以将共性的内容定义到Employee类中!

格式:
    // 定义一个类(父类:将共性内容抽取到这里)
    public class Employee{

    }

    // 定义子类,通过extends关键字描述它与Employee类的关系!======>>> 它就能拥有父类的内容(成员变量、成员方法)
    public class Teacher extends Employee{

    }

注意理解:
    子类就是父类!【子类是Teacher,父类是Employee; 讲师是一名员工】  徒弟拥有师父所有的武功,但是反过来未必!
  1. 存在继承关系后,子类的操作父类(成员变量的特点)
    父子类中成员变量
    不重名:通过子类对象方法的变量名称来区别,到底访问的是子类的成员变量还是父类的成员变量!
    重名:默认访问的就是子类的成员变量!

  2. 存在继承关系后,子类的操作父类(成员方法的特点)
    父子类中成员方法
    不重名:通过方法名称来区分到底访问的是子类的成员方法,还是父类的成员方法!
    重名: 默认访问调用的是子类的成员方法!

     子类中没有父类的同名方法,那么它是直接继承父类!
     子类中有与父类的同名方法,那么调用的是子类的成员方法!此时,子类与父类重名的方法就构成了 覆盖重写(存在继承或者实现关系)!
    
     覆盖重写的好处:能够对父类中的方法进行增强!
    
     构成方法的覆盖重写,必须满足要求:
         整个方法的签名必须与父类的完全一致!【除了访问权限修饰符(子类的权限修饰符的范围必须与父类的相同或者更宽)】
    
  3. 存在继承关系后,子类的操作父类(构造方法的特点)
    构造方法:主要用于创建对象!!!

    我们在创建子类对象的时候,它其实会先去调用父类的无参构造方法!【我们没有在子类的构造方法里面去编写调用父类构造方法的代码】
    当然,我们也可以显示的写出来【在子类构造方法的第一行写上super()】,而且我们还可以去编写代码调用父类的带参构造方法!

    我们在创建子类对象的时候,它其实是先创建父类的对象,然后再创建子类对象!!!【想要使用爸爸的功能,必须先有个爸爸!】

7.super关键字和this关键字
操作子类使用this,操作父类使用super!

★ 子类与父类的成员变量、成员方法重名如何去访问父类的内容!
    重名的成员变量: super.重名的成员变量名称
    重名的成员方法: super.重名的成员变量方法([实参]); // 参数是否需要携带,取决于重名的父子类的成员方法是否有参数!

    构造方法:
        在创建子类对象的时候会调用父类的构造方法!
        在子类想要调用父类的构造方法,必须是在子类的构造方法中完成!!!【这个调用的代码必须写在子类构造方法的第一行!】
            public Zi(){
                // 隐含的动作!去调用父类的无参构造
                super(); // 如果调用父类的带参构造方法,那么必须显示写出来!!!
                System.out.println("子类构造方法");
            }

结论:
★ 成员变量、成员方法:
不重名就用名字去识别访问父类的还是子类的!
重名:
默认访问的都是子类的!【省略了this】
要想访问父类的,需要使用super去操作!

this的基本使用:
    可以访问子类的成员变量: this.成员变量名称
    可以访问子类的成员方法: this.成员方法名称(实参)
    可以访问子类的构造方法: this([实参]);

super的基本使用:
    可以访问父类的成员变量:    super.成员变量名称
    可以访问父类的成员方法:    super.成员方法名称([实参]);
    可以访问父类的成员构造方法: super([实参]);
  1. 继承的特点
    ★ 父类有的,子类可以直接使用,还可以自己进行改写扩展!
    ★ java只允许单继承(一个子类只允许有一个唯一的直接父类!),不允许多继承!但是可以进行多级继承!
    class A
    class B
    class C

     // 单继承Ok
     class A extends B{  // Ok
    
     }
    
     // 不允许多继承!
     class A extends B C{ // Ok  【一个儿子只有一个亲爹!】
    
     }
    
     // 多级继承可以!
     class A extends B{
    
     }
     class B extends C{
    
     }
    

    ★ 一个类可以有多个子类!【一个爸爸可以有多个儿子!】

    Object类是所有的类的祖宗!【最顶层父类!】=====>>>> 我们定义的任何类 都可以直接使用Object类中的方法!

9.抽象类
抽象类的存在价值:【用于设计模板!】

本身继承中,是为了抽取共性内容!!!
     Employee(员工类)
     BanZhuRen(班主任类<工号、姓名、工作>);
     Teacher(讲师类<工号、姓名、工作>);

班主任的工作:班级管理!
讲师的工作:讲课!

员工(班主任、讲课)他们都要工作,但是工作的内容不一样,我们不能在父类中具体化!将工作的方法抽象,那么这类就必须定义为抽象类!

★ 一个类中只要有抽象方法,那么这个类必定是一个抽象类!
★ 一个抽象类中可以没有抽象方法!【不让创建这个类的对象!】
★ 抽象类不能创建对象,但是有构造方法,主要作用:供子类为抽象父类的成员变量初始化!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值