继承: extends
让学生和person产生关系,就可以让学生使用person中的共性内容。
class Student( ) extends Person{}
继承的作用:
a.提高了代码的复用性;
b.让类与类之间产生关系,为第三个特征多态提供前提。
java支持单继承不支持多继承
多层次继承:学习一个继承体系时,先看顶层看基本功能,使用时,找体系最下面的对象。
什么时候定义继承?
答:当事务之间存在所属(is a)关系时,可以用继承。
是否具备父类中所有的东西才能继承。
对于父类中私有部分,子类是无法访问的。但是是具有的,是事物中的一部分,只是为日了提供安全性无法直接访问,但是父类中是具备的,故子类也是具备的。
super关键字——代表父类的空间, 与this很相似,this代表本类对象的引用。
特殊情况——覆盖: 子父类中出现一摸一样的方法时,子类对象运行的是子类的方法,称为覆盖。
覆盖返回值类型、函数名、参数列表都一致。
覆盖注意事项:
a.子类权限应大于等于父类(父类中的show()有public修饰,子类的show()也需要public修饰)
b.静态只能覆盖静态或被静态覆盖
创建子类对象时,父类的空参数构造函数也运行。
因为子类中所有构造函数的第一行都有一个隐式的super()语句。
调用本类中的构造函数用this,调用父类中的构造函数用super。
因为子类继承了父类中的内容,所以创建对象是必须先看父类是如何对内容进行初始化的。
当父类中无空参数构造函数,子类要访问弗雷德构造函数需要通过显示定义super语句来访问。
class Fu
{
Fu(int x){
System.out.println("ddd"+x);
}
}
class Zi extends Fu
{
zi()
{
//super();
super(4);
syso("ddwwe");
}
}
把super(4)给换成this(4)也可以通过,因为有了this就没有super,this和super一样都得定义在第一行,但是this()引到另一个构造函数是,这个里面也会有super()。
注意:用来调用父类构造函数的super语句在子类构造函数中必须定义在第一行,因为父类初始化要先完成。
12.问题:
a.
this和super都是与调用构造函数,它们可以同时存在吗?
答:不可以,他们只能定义在第一行
b.
为什么要定在第一行?
答:因为初始化要先执行。
final关键字:
final class Fu: 即没法作为父类了。
(1).final修饰符,可以修饰类、修饰方法与变量
(2).final修饰的类不能被继承。
(3).final修饰的方法不能被覆盖。
(4).final修饰的变量是个常量,只能赋值一次。
当要求数据不变时,需定义阅读性强的名称来表示该数据,并将数据final化,被final修饰的变量,名称规范是:所有字母都大写,若由多个单词组成则需要_来分割。