继承、抽象

    技术2024-12-08  14

    继承

    概念: 当多个类中具有相同的成员变量和成员方法时,把这些相同的成员抽取出来,放到另一个类中,当某个类需要这些成员时,就不需要再写一遍直接继承该类即可

    注意:java中只支持单继承,不支持多继承,支持多层继承

    定义: 继承是描述两个类之间的关系 类A继承了类B,那么类A会自动拥有类B中非私有的成员,这个过程就是继承 类A称为子类、类B称为父类

    继承的格式

    public class 父类{ //共有成员 } public class 子类1 extends 父类{ //子类可以添加自己特有的成员 } public class 子类2 extends 父类{ //子类可以添加自己特有的成员 }

    继承的好处

    提高了代码的可复用性 给多态做了前提 继承的特点(super的作用)

    1.继承后成员变量的特点 父子类中的成员变量不同名是不会有任何问题,若同名会根据就近原则,在子类中优先访问子类自己的成员变量

    this、super关键字区分变量的不同 this:用来区分本类中成员变量和局部变量的同名情况 super:用来区分子类的成员变量和父类的成员变量同名的情况

    但在开发中是不会是父子类的成员变量同名的!所以了解即可

    2.继承后成员方法的特点 如果父子类的成员方法不同名,是不会出现任何问题的 如果父子类的成员方法同名了,根据就近原则在子类中优先调用子类自己的方法,在子类的方法中,可以使用【super.方法名()】指定调用父类继承而来的方法

    3.继承后构造方法的特点 在说构造方法继承的情况前,先了解下构造方法自身的特点 不写任何返回值,void也不写 方法名必须和类名保持一致 由于构造方法的特殊性,所以构造方法不存在继承 方法的重写

    什么是重写: 在子类中出现了和父类一摸一样的方法(方法的声明)那么子类中的方法被称为重写的方法

    重写的应用 当子类继承了父类的方法但是发现某些方法的功能比较low时那么子类可以重写此方法 在实际开发中会继承jdk中的类重写某个不满意的方法

    注意: 子类方法重写父类方法,必须要保证权限大于或等于父类权限 如果父类的方法是私有的就没有重写私有方法的这种说法,因为私有方法不能继承 this、super总结(访问变量、调用方法)

    在子类中访问变量 this.成员变量名; 访问子类自己的成员变量,如果子类不存在该成员变量,也会访问父类继承而来的成员变量 super.成员变量名; 直接访问父类继承而来的成员变量 这里的成员变量是什么? 优先局部变量,再去子类的成员变量,再去父类继承而来的成员变量

    在子类中调用方法 this.成员方法名(); 调用子类自己的成员方法,如果子类没有该方法,也会调用父类继承而来的成员方法 super.成员方法名(); 直接调用父类继承而来的成员方法

    所以只是单单是 成员方法名(); ==> 等价于 this.成员方法名(); 扩展:this和super访问构造

    this(参数): 调用本类的其他构造,具体是哪一个构造,由参数列表决定 super(参数): 调用父类的构造

    子类的所有构造,默认第一行都会有一句代码,super(),调用父类的无参构造 因为Java设计之初遵循了一个原则: 单一职责

    父类继承过来的成员变量,由父类的构造进行初始化 子类自己的成员变量,由子类的构造进行初始化 抽象类

    由来: 一个父类有多个子类,所有子类都重写某个方法,那么父类中的这个方法存在的价值就不高了 于是java提出了一个新的方法:抽象方法(抽象方法所在的类必须是抽象类)

    抽象类概念: 只要该类是 abstract 修饰的,那么这个类就是抽象类 抽象类可以有抽象方法,也可以没有抽象方法

    抽象类定义格式

    public abstract class 类名{ //可以有抽象方法也可以没有 }

    抽象类使用 不能创建对象,java规定天生做父类,被子类继承的 其他子类继承抽象类后,必须重写抽象类中所有的抽象方法,才能创建对象否则子类还是抽象类

    抽象方法 概念:只有方法的声明(方法的头部),没有方法的实现(没有实现体),并加上 abstract 修饰

    抽象方法定义格式

    public abstract 返回值类型 方法名(参数列表);

    抽象类总结

    抽象类存在的意义: 是作为父类 抽象方法存在的意义: 强制子类必须重写 抽象类不能创建对象 抽象类中,可以有构造方法 抽象类中,不一定包含抽象方法 抽象类的子类,必须重写抽象父类中所有的抽象方法

    Processed: 0.084, SQL: 9