继承

这里写图片描述 继承

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

**判断继承**
“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方法。一个方法可以声明为最终的。最终方法不能被重写。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值