JavaExtends

Java 继承

1 继承 关键字 extends

2 子类继承父类。 一个子类只有一个父类。比如,Dog 类继承 Animal 类。众所周知 Animal 类都有一个属性为 出生日,Dog 是动物,所以 Dog 会继承 Animal 类拥有自己的 出生日。

1
2
3
4
5
public class Animal{
protected Date birth;
}
class Dog extends Animal{
}

3 在构造方法中,如果父类有构造方法,那么子类在重载的时候也必须实例化父类的构造方法。

父类中有带参数的构造方法,就会有对实力域进行初始化。子类中也应当调用(super)父类的构造方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Person{
private String name;
private int age;
Person(String name, int age){
this.name = name;
this.age = age;
}
}
class Student extends Person{
private String studentId;
Student(String studentId, String name, int age){
// super 必须放在句首
super( name,age);
this.studentId = studentId;
}
}

4 方法的覆盖,对于父类有的方法,子类重写的时候注意:①访问域必须大于父类;② 返回类型与父类相同;③ 一般情况下父类的属性为 private,不允许访问;④ 调用父类的方法需要使用 super

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Person{
private String name;
private int age;
Person(String name, int age){
this.name = name;
this.age = age;
}
protected String myToString(){
return "[name : " + this.name +"] [age : " + this.age+" ]";
}
}
class Student extends Person{
private String studentId;
Student(String studentId, String name, int age){
// super 必须放在句首
super( name,age);
this.studentId = studentId;
}
public String myToString(){
return "[studentId : " +this.studentId+" ]\t"+ super.myToString();
}
}
public class Demo{
public static void main(String[] args) {
Student student = new Student("20170001","CheEn",20);
System.out.println(student.myToString());
}
}

5 注意父类的权限。

① 四种权限

public protected 默认 private
同一个类
项目下所有的 × × ×
子类中 × ×
同一个包 ×

② final 关键字 在父类中如果存在则有三种情况

1) 如果是类 则不允许继承

1
2
3
4
5
6
public final class Dog{
}
//The type JinMao cannot subclass the final class Dog 不能继承
class JinMao extends Dog{
}

2) 如果是类有 final, 初始化之后就不能改变

1
2
3
4
5
6
7
8
9
10
11
public class Dog{
private final String name = "dog";
public String getName() {
return name;
}
public void setName(String name){
//The final field Dog.name cannot be assigned
this.name = name;
}
}

3)如果是 父类中方法有 final 修饰,子类便不能继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Dog{
private final String name = "dog";
public String getName() {
return name;
}
public final void print(String name){
//The final field Dog.name cannot be assigned
System.out.println("final 修饰");
}
}
class JinMao extends Dog{
JinMao(){}
//Cannot override the final method from Dog
public final void print(String name){
//The final field Dog.name cannot be assigned
System.out.println("final 修饰");
}
}