首先我们要明白继承的意义是什么?
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中, 那么多个类无需再定义这些属性和行为,只要继承那个类即可。
一、继承介绍
1)继承的优点:
-
继承的出现减少了代码冗余,提高了代码的复用性。
-
继承的出现,更有利于功能的扩展。
-
继承的出现让类与类之间产生了关系,提供了多态的前提。
2)继承的基本语法:
class 子类 extends 父类{ }
代码举例: class Cat extens Animal{ }
3)继承的“继承性(inheritance)”:
-
子类继承了父类,就继承了父类的方法和属性。
-
在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和 方法。
-
在Java 中,继承的关键字用的是“extends”,即子类不是父类的子集, 而是对父类的“扩展”。
4)关于继承的规则:
1、子类不能直接访问父类中私有的(private)的成员变量和方法。
像父类private的属性和方法我们只能通过setter或getter来获取。
2、 Java只支持单继承和多层继承,不允许多重继承
-
一个子类只能有一个父类
-
一个父类可以派生出多个子类
这里java摈弃了c++的多重继承,让接口的功能来代替多重继承**。**
二、继承的细节问题
-
子类继承了所有的属性和方法,非私有的属性和方法可以在子类直接访问, 但是私有属性和方法不能在子类直接访 问,要通过父类提供公共的方法去访问。
-
子类必须调用父类的构造器, 完成父类的初始化 。
-
当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器,如果父类没有提供无 参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。
-
如果希望指定去调用父类的某个构造器,则显式的调用一下 : super(参数列表)
-
super 在使用时,必须放在构造器第一行(super 只能在构造器中使用)
-
super() 和 this() 都只能放在构造器第一行,因此这两个方法不能共存在一个构造器
-
java 所有类都是 Object 类的子类, Object 是所有类的基类.
-
父类构造器的调用不限于直接父类!将一直往上追溯直到 Object 类(顶级父类)
-
子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制。
10.不能滥用继承,子类和父类之间必须满足 is-a