继承
1.提高了代码的复用性2.让类与类之间产生了联系。
但是不可以单纯为了简化代码而继承,一定要是有所属关系才能去继承.java中只支持单继承.但是支持多层继承。
继承时子父类的构造函数关系
子类继承父类时,会继承父类的所有函数除了父类的构造函数
在对子类对象进行初始化时,父类的构造函数也会运行。因为子类的构造函数的第一行会有默认语句 super(),
super()与this()类似。this()是调用本类的构造函数;super()是调用父类的构造函数。
因此super()与this()不能同时出现在构造函数中,因为这两个都是要求在构造函数的第一行。
有一个特点需要特别注意一旦父类的构造函数不是默认的空构造函数那么子类也必须指定构造函数,其子类的构造函数成员必须包含父类的构造函数。
子类区别于普通类的是,子类不可以在定义空构造函数或者其他和父类无关的构造函数了,因为在对子类对象进行初始化时,父类的构造函数会先运行,如果定义了
错误形式的构造函数会编译失败。
class Person {
String name;
int age;
//父类指定了构造函数
Person(String name,int age)
{
this.name = name;
this.age = age;
}
}
public class Student extends Person {
int num;
/*
* 子类必须也要指定构造函数,如果子类成员变量比父类多那么用super调用父类构造函数, 在添加自己的成员进构造函数
*/
Student(String name, int age) {
super(name, age);// 调用父类构造函数
this.num = num;
}
/*
* 在定义空构造函数就是错误的了, 因为在对子类对象进行初始化时,父类的构造函数会先运行,如果定义了 错误形式的构造函数会编译失败
* Student(){}
*/
public void studey() {
System.out.println("study");
}
}
重写
提到继承不能不说的就是方法重写。
当子类中出现与父类一模一样的函数时,
当子类对象调用该函数时会运行子类函数的内容。
如同父类的函数被覆盖一样。
注意:
1:子类覆盖父类,必须要保证子类权限要大于或等于父类权限。
2:静态只能覆盖静态。
class Father
{
void show(){
System.out.println("father...");
}
}
class Son extends Father
{
void show(){
super.show();
System.out.println("son...");
}
}