面向对象之继承
类之间的关系
横向关系
依赖关系
依赖关系是一种比比较紧密的关系,一般表现形式为一个方法的执行,需要通过另一个对象的支持
public class Course{
}
public class Student {
public void study(Course c){
}
}
关联关系
关联关系是一种比依赖更为紧密的关系,在代码层次表现为,一个类的对象作为属性定义到另一个类中。
/**图书类*/
public class Book {
int id;
String name;
BookManager manager;
}
/**图书管理员*/
public class BookManager {
Book[] books;
}
聚合关系
聚合关系是一种比关联关系更为紧密的关系,表现是的两个类之间的一种包含,但是这个包含又不是必须或者不可分割的,从代码层面表现来看,跟关联是一致的,两者之间只是存在语义上的区别。
//部门
public class Dept {
int dno;
String name;
}
//员工
public class Emp {
int eno;
String name;
double sal;
Dept dept;
}
组合关系
组合关系是以上横向关系中最强的关系,表现的是部分跟整体的关系,两者之间通常表现为不可分割的一种关系,但是代码层面的表现跟关联,聚合是一致的,只是一种语义的区别。
public class People {
Head head;
Body body;
}
public class Head{
}
public class Body{
}
纵向关系
继承
继承是面向对象的三大特征之一,体现出的是一种类的上下级关系,因此是一种纵向关系。
java中通过继承,可以提高类的可扩展性,以及代码的可复用性;继承是一种is a 的关系。
继承
语法
[修饰符] class 子类名 父类名称{
//属性、方法的声明
}
父类
public class Father {
private String firstName;
private double money;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
子类
public class Son extends Father{
}
关于继承的注意事项
- java中一个父类可以存在多个子类
- 一个子类只能有一个父类(C++允许)
- Java中虽然不能多继承,但是可以使用多重继承到达多继承目的
- 子类继承父类之后,子类中可以使用父类的非私有元素(属性,方法) —代码可复用
- 子类除了可以直接使用父类中的非私有元素外,还可以扩展自己的信息 —代码可扩展性
- 在创建子类对象时,通常是先调用父类构造器(不是创建父类对象)完成初始化操作,再执行子类构造器完成子类对象的创建以及初始化(调用默认构造器)
- 如果父类中不存在默认构造器,则子类中需要通过super显式的调用父类的其他构造器
- 构造器不能被继承,只能被子类调用(初始化子类时)
访问控制
访问权限修饰符:在java中对于元素的访问提供了四种修饰符,分为为:private、default(不写)、protected、public;这四种修饰符分别对元素赋予了不同的访问权限,具体如下:
注意事项:
- 以上访问权限修饰符一般可以用于修饰:类,属性,方法
- 在一个java文件中只能存在一个顶层public 类(不允许使用除public外的其他访问修饰符修饰)
- 内部类可以使用private和protected修饰