欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继承

程序员文章站 2022-06-19 21:18:05
...

继承继承

  **概念**
在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承。
已有的类称为父类,而新类称为子类。父类也可以称为基类、超类,子类也可以称为派生类。这些术语可以互换,但是意思是相同的。
在面向对象编程中,当两个或多个类是不相同的,但是共享相同特征的时候,将共同的元素从类中拿出来,放到一个父类中。这些类继承父类,因此就继承了所有父类的特征,同时,每个子类中又保留了不同的特征。使用继承不仅可以重用已有的代码,从而避免代码重复,还可以创建一个更容易维护和修改代码的程序。

**判断继承**
“is a”关系是一个简单而强大的规则,用于判断父类和子类的继承关系是否正确。当使用继承时,我们必须能够说子类“ is a(是一个)” 父类。如果这个语句是真的,那么继承关系就是对的。
如果对象有一个(has a)属性,这个属性就必须是类中的一个成员变量。

**实现**
在Java中,一个类使用关键字extends继承其它类。关键字extends出现在类声明时的类名后,extends后面跟着的是要继承的类的名称。

**单继承与多继承**
某些OOP语言(例如C++)允许子类有多个父类。但是,在Java中这是不允许的。在Java中,一个类只能有一个父类。多继承在Java中是不允许的。Java语言的目标之一是创建一个易于使用和理解的面向对象编程语言。而多继承只能给编程语言带来混淆。
一个Java类只能有一个父类。但是这并不意味着一个类没有祖父、曾祖父等等。一个Java类可以有父类、父类也可以父类,依此类推。

**根类Object**
Java语言API中包含了一个名为Object的特殊类,它是整个Java类层次中的根类。Object类在java.lang包中,是每个Java类的父类,要么是直接的父类,要么就是间接父类。

**注**
类和类之间的关系有很多,如:实现(接口相关)、组合、继承。
继承时,构造器是没办法继承的,父类私有的无法继承。
继承指的是类的继承,而不是对象的继承。
运行时先进入父类的构造器,为父类中的属性分配空间,然后回到自己的构造器,继续为自己的属性分配空间(属性的叠加)。所以只new出一个实例,是子类的实例。

 **类和类之间的关系**
 继承
 实现(接口)
 部分和整体:组合、聚合
 关联关系
 使用关系

 **方法重写**
子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。这称为方法重写,是OOP的特征之一。
当子类重写父类的方法时,必须遵循如下的规则:
子类的方法的返回值的类型、方法名和形式参数列表,必须和父类中的是相同的。如果子类中的方法与父类中的方法同名,但是子类的方法改变了形式参数列表,那么这是方法重载,而不是方法重写。不要混淆这两个概念,二者的用法是完全不同的。
访问修饰符必须不小于父类中的访问修饰符。例如,如果父类的方法是public,那么子类的必须是public。如果父类的方法是protected,那么子类必须是protected或public(public比protected访问权更大)。
子类中重写的异常不能抛出比父类更多的异常,其原因我们将在后面异常处理一章中讲解。

equals()方法:
Object类有一个用于判断两个对象是否相等的equals()方法。我们编写的每一个类应该覆盖equals()方法,以让类的用户判断什么时候类的实例是相等的。
equals()方法比较两个对象,测试二者是否相等。比较运算符“==”用于检测是否两个引用指向同一对象,这种比较方法是与equals()完全不同的。
“==”代表,如果两边的数据类型是基本数据类型,那么直接比较值,如果两边是引用数据类型,那么比较引用是否相等,
“equals”默认情况下调用的是Object.equals( ),这个方法比较的是对象的引用是否一致,但是在某些特殊业务场景中,我们也可以重写该方法,如String类。

**super()关键字**
我们已经知道,每个对象都有一个对自身的引用,称为this引用。当在一个类中,引用类本身的成员变量或方法时,可以显式地使用this引用。类似地,一个类可以使用关键字super,来显式地引用从父类继承的成员变量或方法。我们可以把super看作是子对象对父对象的引用。
super( )代表父类的构造方法,这行代码必须要放置在第一行,如果程序不显式写出,编译器也会默认添上。
this( )代表本类中其他的构造方法;super( )则代表父类的构造函数,这个默认编译器会自动给我们添加子类构造的第一行
super( )代表的是继承自父类那一部分财产(父类私有的不能访问)
this既可以访问自己的,也可以访问继承自父类的财产
this的作用范围:可操作本类的所有属性和方法,还可以操作继承自父类的财产
super的作用范围:只可以操作来自继承父类的财产(属性和行为)
this作用范围大于super,所以直接使用this

**final关键字**
final关键字的另外两种用法
final类。一个类可以声明为最终类的。最终类不能被有子类。
final方法。一个方法可以声明为最终的。最终方法不能被重写。