一、
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
二、java在继承中的细节:
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
三、子类对象的实例化过程
1.分配成员变量的存储空间并进行默认的初始化,就是用new关键字,
产生对象后,对类中的成员变量按第三章的表的对应关系对对象中的成员
变量进行初始化赋值。
2.绑定构造方法参数,就是new Person(实际参数列表)中所传递进的参数赋值给构造方法中
的形式参数变量
Student st= new student("zhangsan",20,"清华大学")
3.在执行构造方法之前,检查构造函数中看有没有this()函数(调用其他的构造方法的函数),如有this()调用,则调用相应的重载构造方法(被调用的重载构造方法又从步骤2开始执行流程),
被调用的重载构造方法的执行流程结束后,回到当前构造方法,当前构造方法直接跳转到步骤6(程序代码不包括super()和this()这样的语句的)
4.如果没有this()这样的函数,就显示或隐式追溯(super()隐藏或显示的意思)调用父类的构造方法(一直到Object类为止,Object是所有java类的最顶层父类,在本章后面部分有详细讲解),父类的构造方法又从步骤2开始对父类执行这些
流程,父类的构造方法的执行流程结束后,回到当前构造方法,当前构造方法继续往下执行。
5.进行实例变量的显式初始化操作,也就是执行在定义成员变量时对所进行赋值的语句,如:
public String school="unkown";
6.执行当前构造方法的方法体重的程序代码。
四、覆盖父类的方法:在子类中可以根据需要对从父类中继承来的方法进行改造-----方法的覆盖(也叫重写)。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。
五、final关键字:
- 在Java中声明类、属性和方法时,可使用关键字final来修饰。
- final标记的类不能被继承。
- final标记的方法能被子类重写。
- final标记的变量即成为常量,只能赋值一次。
- 方法中定义的内置类只能访问该方法内的final类型的局部变量。