继承
1)作用:代码复用
2)通过extends来实现继承
3)超类/父类:派生类所共有的属性和的行为
派生类/子类:派生类所特有的属性和行为
4)派生类继承超类后,派生类具有:派生类的+超类的
5)一个超类可以有多个派生类
一个派生类只能继承一个超类------单一继承
class Person{ //--------------------------超类/父类
String name;
int age;
String address;
void eat(){}
void sleep(){}
}
class Student extends Person{-------------派生类/子类
String stuId;
void study(){}
}
class Teacher extends Person{-------------派生类/子类
double salary;
void teach(){}
}
class Doctor extends Person{--------------派生类/子类
String level;
void cut(){}
}
Student zs = new Student();
zs.stuId/study();
zs.name/age/address/eat()/sleep();
Teacher ls = new Teacher();
ls.salary/teach();
ls.name/age/address/eat()/sleep();
Doctor ww = new Doctor();
ww.level/cut();
ww.name/age/address/eat()/sleep();
6)继承具有传递性
class Aoo{---------------------a
int a;
}
class Boo extends Aoo{---------b+a
int b;
}
class Coo extends Boo{---------c+b+a
int c;
}
7)java规定:构造派生类之前必须先构造超类
- 在派生类的构造中若自己没有调用超类构造,则默认super()调用超类的无参构造
- 在派生类的构造中若自己调用了超类构造,则不再默认提供
public class SuperDemo {
public static void main(String[] args) {
Boo o = new Boo();
}
}
class Aoo{
Aoo(){
System.out.println("超类构造");
}
}
class Boo extends Aoo{
Boo(){
super(); //默认super()来调用超类的无参构造---必须位于第一行
System.out.println("派生类构造");
}
}
输出结果为:
先输出超类构造,在输出派生类构造,因为当派生类继承超类之后,如果没有继承超类的构造方法,编译器会默认继承超类构造,也就是super();
注意:super()调用超类构造方法,必须位于派生类构造方法的第一行
8)如果超类的构造有参数,派生类的super必须传参数,否则报错
public class SuperDemo {
public static void main(String[] args) {
Boo o = new Boo();
}
}
class Coo{
Coo(int a){
}
}
class Doo extends Coo{
Doo(){
super(25);
}
/*
//如下代码为默认的
Doo(){
super();
}
*/
}
super的用法:
super:指代当前对象的超类对象
- super.成员变量名----------访问超类的成员变量
- super.方法名()--------------调用超类的方法
- super()-----------------------调用超类的构造方法