语法:
Class 子类extends 父类{
子类的属性
子类的方法
}
继承的特点:
1..允许子类直接使用父类的所有属性和行为。
2.子类使用extends关键字继承父类的共同属性以外,子类还可以有自己特有的属性或方法
3.父类更通用,子类更具体。
4.子类只能获得父类中的非private的属性,如果想要继承就得提供公共的set和get的方法,私有的方法是无法继承下来的
5.Java中只能做单继承
比如:classA extends B{
}
6.Java支持多级继承
比如:
classA extends B{
}
classC extends A{
}
为什么使用继承:减少代码的重复性,更好的实现代码的重用。
super关键字
- 子类实例化的过程中父类的构造器先被调用,然后再调用子类的构造器。
- 子类的构造器被调用的时候父类的默认构造器就会被调用(父类如果存在着有参数的构造器,一定要把默认构造器显式的定义出来)。
- 子类在调用父类的有参数的构造器的时候使用 super(参数列表........),这时父类的默认构造器就不会再被调用了(super一定放在构造器的第一行)。
- super可以表示父类的引用,我们可以使用super和this来区分父类和子类中同名的属性。在子类中访问属性的查找顺序首先在子类中查找指定的属性名字,如果在子类中没有该属性,那么就在父类中去查找该属性。方法也是一样的当子类和父类有同样的方法时通过子类调用的这个相同的方法时,调用的是子类的方法。但是我们可以通过super对父类的引用来调用父类的方法
如何使用继承呢?
把上面的员工类改写一下——继承自Person类
public class Employee extends Person {
private int salary;//工资
public Employee(String id, String name, String sex, int salary) {
super(id, name, sex);
this.salary = salary;
}
@Override
public void print() {
super.print();
System.out.println(salary);
}
}
使用继承就很好地解决了上面提出的两个问题。
extends是“拓展、延伸”的含义,public class Employee extends Person 就是声明一个叫做Employee的类,它是在Person类的基础上进行拓展,专业术语称之为继承自Person类。
super是“超”的含义,Person类相对于Employee类就是超类,通俗一点的说法是父类。
子类继承了父类的属性和方法,当然也可以在此基础上进行拓展——加和改。在这个案例中加了“薪水”属性,改了“打印”方法。这里有一个专业术语——重写(override)。
继承不仅仅解决了刚才的两个问题,还使得类有层次结构,逻辑上也更加合理。比如“员工”也是“人”。