关于子类和父类之间的继承关系

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于⼦类和⽗类之间的继承关系
/*⽗⼦类之间的继承关系
* 1.⼦类继承⽗类的关键字:extends
* 2.除外⽗类中的被private修饰的成员变量和⽅法不可以被⼦类继承,其它都可以被⼦类继承
* 3.⼦类继承⽗类后⼜出现和⽗类相同的成员变量,则⽗类中的成员变量被隐藏,⼦类只能通过从⽗类继承过来的⽅法去修改它
* 4.⼦类继承⽗类中的⽅法,可以对其进⾏重写,⽗类中的⽅法则被隐藏起来了。

⽅法重写规则为:
* (1)必须存在继承关系 (2)重写后的⽅法必须和⽗类保持⼀致(包括返回值类型,⽅法名和修饰符列表)
* (3)重写后的⽅法的访问权限不得低于⽗类中的⽅法的访问权限,可以更⾼
* 5.⼦类除继承⽗类中的成员变量和⽅法之外,还可以⾃定义⾃⼰的成员变量和⽅法。

* 6.所有的类都是Object类的⼦类,因此可以称Object类为超类
* 7.关于⼦类的上转型对象:
* 将⼦类的赋值给⽗类的引⽤,这种情况被认为是⼦类的上转型,⼦类对象也因此变为上转型对象
* (1)⼦类的上转向对象可以访问⽗类中被隐藏的成员变量
* (2)⼦类的上转型对象访问⽗类中被隐藏的⽅法时,调⽤的依然是⼦类中重写的⽅法。

* (3)对⽐⼦类和⼦类的上转型对象之间的区别(关于访问⽗类中的成员变量和⽅法)
* ⼦类的上转型对象可以访问:
* 从⽗类中继承的变量;⽗类中被⼦类隐藏的变量;从⽗类中继承的但未被重写的⽅法
* ⼦类的上转型对象不可以访问:
* 从⽗类中继承的已被⼦类重写的⽅法;⼦类新增的成员变量和⽅法
* ⼦类可以访问:
* 从⽗类继承的成员变量和⽅法,除外⽗类中的私有变量和⽅法;
* ⼦类不可以访问:
* ⽗类中被隐藏的成员变量和⽅法,以及⽗类中的私有变量和⽅法
* 8.对象的上转型对象有点类似于⾯向对象中的多态。

* 9.关于final 关键字:
* (1)修饰成员变量时,被final 修饰的成员变量必须在声明的时候就赋予初始值;并且不允许再做任何修改,包括在被⼦类继承之后
* (2)修饰⽅法时,⼦类从⽗类中继承的被final修饰的⽅法不允许重写
* (3)修饰类时,被final修饰的类不可以被继承,即没有⼦类。

* 10.关于抽象类:abstract class 类名{}
* (1)抽象类和普通类类似,修饰符列表多了⼀个abstract,类体中可以有成员变量,普通⽅法和抽象⽅法
* (2)抽象类中的抽象⽅法没有⽅法体,需要继承该抽象类的⼦类重写抽象⽅法,否则抽象类和抽象⽅法都毫⽆意义
* (3)抽象类不能实例化对象,必须由普通类去继承它,抽象类中的属性和⽅法的存在才具有意义
* (4)抽象类中也可以没有抽象⽅法
* (5)abstract不可以⽤来修饰成员变量,并且抽象类中的成员变量必须赋予初始值
* (6)抽象类存在的意义:
* 将其它多个普通类中共同存在的属性和⽅法,集中体现在⼀个抽象类中,并且这些类共同的需求⼜有⼀些⼩⼩的区别:例如计算⼀个柱体的体积,
* ⽽柱体的底⼜存在多种形状的,但⽆论是哪⼀种形状,都需要有计算⾯积的功能,因此可以将计算⾯积这⼀功能封装在⼀个抽象类当中,让不同形状的底去* 继承该抽象类,并实现⾥⾯的抽象⽅法,这样也使得每⼀个类型的底不⽤重读写计算⾯积的功能代码,因此抽象类的使⽤也实现了代码的复⽤性。

* 11.关于接⼝:
* 接⼝是⼀种特殊的抽象类,抽象类是⼀种不完全的抽象类,因为其⾥⾯可以不包含抽象⽅法,⽽接⼝⾥必须全部为成员必须全部是抽象的,
* 因此接⼝是⼀种特殊的,完全的抽象类
* (1)接⼝是⼀种抽象类,因此接⼝也是⼀种引⽤
* (2)修饰接⼝的修饰符: interface
* (3)接⼝⽀持多实现,即⼀个类可以同时实现多个接⼝,⼀个接⼝也可以同时被多个类实现
* (4)接⼝中的⽅法全部都是抽象的,并且必须是公开的(public),因此实现了接⼝的类必定要重写⾥⾯全部的抽象⽅法;
* 语法格式:[public abstract] 返回值类型⽅法名();
* (5)接⼝中的成员包括常量(没有变量)和抽象⽅法,其中常量的声明语法格式为:
* [public fianl static] 类型常量名=常量值;
* (6)注意⽅法重写的时候,不可以降低⽅法的访问权限,只可以提⾼,为了⽅便不同的类都可以实现接⼝,因此接⼝中的⽅法全部都是公开的
* 所以实现了接⼝的类在重写接⼝中的⽅法的时候也就不存在可以修改访问权限的情况了。

* (6)接⼝存在的意义:接⼝类似抽象类,都是把其它⼏个毫⽆关联但是⼜具有相同需求的集合在⼀个接⼝当中,
* 这样其它类就可以通过实现接⼝来达到各⾃的需求,⽽⼜不会存在关耦合度过⾼,代码复⽤性低的缺陷,相反,抽象类和接⼝的优点就是降低程序的耦合度,* 提⾼程序可扩展性,所以推荐⾯向抽象编程,实质上是推荐⾯向接⼝编程
* 12.抽象类和接⼝之间的区别:
* (1)抽象类中的成员可以是⾮抽象的,⽽接⼝中的成员则必须全部是抽象的
* (2)抽象类不⽀持多继承,⽽接⼝⽀持多实现,即接⼝的可扩展性⾼于抽象类,⼀个类可以同时不同的接⼝⾥的不同的功能。

* 因此我们⼀般更多地采⽤⾯向接⼝编程的⽅式
* 13.关于构造⽅法:
* 构造⽅法的作⽤是⽅便实例化对象,在实例化对象的时候也可以向其传递参数。

* (1)构造⽅法分为有参构造和⽆参构造,⼀个类在没有写构造⽅法的情况下就是默认⼀个⽆参构造函数
* 类实例化对象其实就是根据这个构造⽅法创建的新对象。

* (2)有参构造函数是根据类中的属性定义的,即可以在实例化对象的时候就给属性赋予参数指定的值
* (3)构造⽅法不能够被⼦类继承。

⼦类要想调⽤服了中的构造函数,需要使⽤super关键字
*14.关于super关键字:
* super关键字的作⽤:
* (1)⼦类可以使⽤super关键字操作⽗类中被隐藏的成员变量和⽅法(当⼦类中的成员变量和⽗类中的相同,⼦类重写⽗类中的⽅法,
* 则⽗类中的成员变量和⽅法被隐藏),并且是在⼦类中的某个⽅法⾥⾯通过super去调⽤。

* (2)使⽤super 关键字可以调⽤⽗类中的构造⽅法。

每当⼀个类实例化对象的时候,实际上都是在调⽤其构造⽅法
* ⽽⼦类在实例化对象的时候不需要⾸相实例化其⽗类就可以拥有⽗类的属性和⽅法,原因是因为⼦类的构造⽅法的第⼀条语句是super();/super(参数列表);
* 即⼦类在调⽤⾃⾝的构造⽅法创建对象时,会先执⾏super();语句,调⽤⽗类中的构造⽅法⾸先创建⽗类对象,只是该对象没有赋值给⼀个引⽤,但其实在* 堆内存中已经为⽗类的实例化对象开辟了⼀个空间。

* (3)若⼦类中的构造⽅法的第⼀条语句没有super();语句,则默认被隐藏起来了,实际上是存在的。

* (4)构造⽅法中super();语句只能有⼀条,super()可以带参数也可以不带参数,只是创建出来的⽗类对象上有些差别。

相关文档
最新文档