zoukankan      html  css  js  c++  java
  • 继承(JAVA)


    继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

    一、继承的基本语法:

    在Java语言中,用extends关键字表示一个类继承了另一个类。例如:

     public class Sub extends Base{
    
           .......
                 }

    Sub类到底继承了Base类的哪些东西呢?分为以下两种情况:

    ① 当Sub类和Base类位于同一个包中:Sub类继承Base类中public、Protected和默认访问级别的成员变量和成员方法

    ② 当Sub类和Base类位于不同的包中:Sub类继承Base类中public和protected访问级别的成员变量和成员方法

    注:

    java语言不支持多继承,即一个类只能直接继承一个类,例如以下代码会导致编译错误:

    class Sub extends Base1,Base2(......)

    所有的Java类都直接或间接地继承Java.lang.Object类。Object类是所有java类的祖先。

    二、方法重载(OverLoad)

    对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法

    注:

    重载方法必须满足以下条件:

    ① 方法名相同

    ② 方法的参数类型、个数、顺序至少有一项不相同

    ③ 方法的返回类型可以不相同

    ④ 方法的修饰符可以不相同

    三、方法覆盖(Override)

    覆盖方法必须满足多种约束:

    ① 子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致

    ② 子类方法不能缩小父类方法的访问权限

    ③ 子类方法不能抛出比父类方法更多的异常

    ④ 方法覆盖只存在于子类和父类之间,在同一个类中的方法只能被重载,不能被覆盖

    ⑤ 父类的静态方法不能被子类覆盖为非静态方法

    ⑥ 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法

    ⑦ 父类的非静态方法不能被子类覆盖为静态方法

    ⑧ 父类的私有方法不能被子类覆盖

    ⑨ 父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法 二是子类重新声明父类的抽象方法

    ⑩ 父类的非抽象方法可以覆盖为抽象方法

    四、方法覆盖与方法重载的异同

    相同点:

    要求方法相同

    都可以用于抽象方法和非抽象方法之间

    不同点:

    方法覆盖要求参数签名必须一致,而方法重载反之

    方法覆盖要求返回类型必须一致,而方法重载不做限制

    方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法

    方法覆盖对方法的访问权限和抛出的异常有特殊要求,而方法重载无限制

    父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

    五、super关键字

    super和this关键字都可以用来覆盖java语言的默认作用域,使被屏蔽的方法或变量为可见。

    注:

    在程序中,在以下情况会使用super关键字:

    ①在类的构造方法中,通过super语句调用这个类的父类的构造方法

    ②在子类中访问父类的被屏蔽的方法和属性

    六、继承的利弊和使用原则

    利弊:

    继承关系最大的弱点:打破封装

    七、比较组合与继承

    1、使用继承关系

    从类A和类B中抽象出父类C,它包含了method1()和method2()、method3()方法。由于在类A和类B中都会访问method2()方法。因此把method2()方法声明为protected类型

    2、使用组合关系


    java继承特征:
    (1)继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
    (2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
    (3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
    (4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
    (5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。



  • 相关阅读:
    uva-10160-枚举
    zk-systemd
    c++官方文档-枚举-联合体-结构体-typedef-using
    c++官方文档-动态内存
    c++官方文档-指针
    c++官方文档-命名空间
    c++官方文档-模版函数和重载
    c++官方文档-按值传递和按引用传递
    c++官方文档
    HDU 1068
  • 原文地址:https://www.cnblogs.com/hq-123/p/5532660.html
Copyright © 2011-2022 走看看