黑马程序员-继承

来源:互联网 发布:数控车编程实例 编辑:程序博客网 时间:2024/05/05 03:18

  • ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
  • 继承概述:

在java中只支持单继承,不支持多继承,因为多继承会出现安全隐患,

当多个父类中定义了相同的功能,当功能内容不同时,子类对象不确定要运行哪一个,

但是java保留了这种机制,并用另一种体现形式来完成表示,多实现。

java支持多层继承,也就是一个继承体系。

要想使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性的功能

通过了解这个功能,就可以知道该体系的基本功能。

那么在具体调用的时,要创建最子类的对象,

一是因为有可能父类不能创建对象

二是创建子类对象可以使用更多的功能,包括最基本的,也包括最特有的。

总结来说就是查阅父类功能,创建子类对象使用功能。

  • 继承:

提高了代码的复用性,

让类和类之间产生关系,有了这个关系,才有了多态的特性。

注意!千万不要为了获取其他类的功能,简化代码继承,必须是类和类之间有所属关系才可以继承。

如果子类中出现私有的同名变量时,

子类要访问本类中的变量,用this

子类要访问父类中的变量,用super

super和this的使用几乎一样

this代表的是本类对象的引用,

super是代表父类对象的引用。


1.子类继承父类的成员变量

  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:

  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;

  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发现隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。

  2.子类继承父类的方法

  同样地,子类也并不是完全继承父类的所有方法。

  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;

  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;

  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。


  • 关于覆盖:

1.子类覆盖父类,必须保证子类的权限大于等于父类,才可以覆盖,否则编译失败,静态只能覆盖静态

重载:只看同名韩胡说的参数列表。   重写:子父类的方法要一模一样。

  • 关于继承构造函数:

因为父类的数据子类可以直接获取,所以在建立子类对象的时候,需要先查看父类是如何对这些数据进行初始化的。

所以子类对象的初始化时,先访问一下父类中的构造函数。

如果要访问父类中指定的构造函数,可以先通过手动定义super语句方式来指定。

注意!super语句一定定义在子类构造函数的第一行。

子类的所有构造函数,都会默认访问父类中空参数的构造函数,

因为子类每一个构造函数的第一行都有一句隐式的super();

当父类中没有空参数构造函数时,子类必须手动通过super语句的形式来指定要访问父类中哪个构造函数。

当然,子类的构造函数的第一行也可以手动的指定this语句来访问本类中的构造函数。

子类中至少会有一个构造函数会访问父类中的构造函数。


0 0