类之间的关系:
依赖:如果在一个类A的方法中操作另外一个类B的对象,那么类A依赖于类B
聚合:如类A包含类B
继承:继承是已有类创建新类,在已有类基础上扩展功能。
继承:
被继承的类叫父类(parent class)或超类(super class),继承父类的类叫子类(subclass)或派生类(derived class)
将共同特征抽出来放到一个共同的父类,子类通过继承父类来继承属性和方法,不需在自己的类体中再重复,也可以增加自己独有的属性和方法。
在Java中,关键字“extends”表示继承。格式:
<access> <modifiers> class SubClass extends SuperClass{
//......
}
(其实就有点像提取公因式,父类就是可以被提取出来的那个公因式)
示例:
public class Person {
private String name;// 姓名
private int age;// 年龄
private String gender;// 性别
……//省略get和set方法
}
class Teacher extends Person {
private float salary;// 薪酬
private String department;// 部门
……//省略get和set方法
}
class Student extends Person {
private int[] score;// 成绩
private String grade;// 年级
……//省略get和set方法
}
1.在Java中只支持单一继承,即一个类只能继承一个父类,而不能继承多个类
2.如果定义一个没有指明父类的类,默认自动继承类java.lang.Object
3.继承中,子类拥有父类的所有属性和方法,但父类可通过封装保留自己的隐藏数据,并通过暴露设计提供子类可访问的属性和方法。
多态:
重写: 当一个子类继承了一个父类时,可以在子类中直接使用父类的属性和方法。如果父类的方法无法满足子类的需求,则可以在子类中对父类的方法进行改造,也称作重写(override)。
重写的原则:
重写的方法的签名必须要和被重写的方法的签名完全匹配;
重写的方法的返回值必须和被重写的方法的返回一致或者是其子类;
重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
子类重写父类方法的过程中,可访问性只能一样或变的更公开。
可覆盖父类的方法,也可以重写父类的属性。
代码示例:
public class Base {
public void print() { //protected
System.out.println("In Base ");
}
public static void main(String[] args) {
Son obj = new Son();
obj.print();
}
}
class Son extends Base {
// 覆盖父类的print()方法
public void print() { //重写时访问权限变化
System.out.println("In Son ");
}
}
子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限。例如,父类中的方法是public权限,子类的方法就不能是private权限