类之间的关系
继承(纵向关系):
java中只允许单继承,可以使用接口实现多继承。
被继承的类称为父类,继承父类的类叫做子类。继承后,子类将获得父类的所有属性和方法,父类的私有成员也可以被子类继承,但子类不能访问,子类也有自己的属性和方法。一个类继承另一个类,也称为泛化,体现共性与特性的关系。
语法:class subClass(子类) extends baseClass(父类,默认的父类为Object){//类体}
子类对象:创建时先创建父类空间,再创建子类空间,并初始化为默认值。执行时先执行父类的初始化和构造函数,再执行子类的初始化和构造函数。
域的隐藏:子类与父类变量重名,子类的域将屏蔽父类的域,父类域存在,只是优先访问子类的,如果访问父类的,加super
方法的重写:子类与父类方法重名,方法名、参数数量与类型完全相同,子类方法把父类方法覆盖,没有父类的方法了。
重写和重载是面向对象多态性的两大体现。
类型的转换:子类对象可以看作是父类对象,但是父类对象不能看作是子类对象。函数参数是父类,可以传递子类对象,父类对象实际指向子类,可以转换为子类。
例:
class B extends A//其中,B是子类,A是父类
A a=new B();
a.method();//访问的是new后的类(即B)里的method方法
a.i;//引用的是A里的变量
实现(纵向关系):
类与接口就是实现关系,一个类实现接口中声明的方法。
依赖(横向关系):
在一个类的方法中操作另一个类的对象,称为第一个类依赖于第二个类。
关联(横向关系):
在一个类中使用另一个类的对象作为该类的成员变量,体现两个类之间的强依赖关系。
聚合(横向关系):
关联的一种特例,体现整体与部分的关系(部门与员工)。
组成(横向关系):
关联的一种特例,体现整体与部分的关系(constains-a),不可分离。
内部类
在一个类的类体之内再定义一个类,该情况下外面的类成为“外部类”,里面的类称为“内部类”,内部类是外部类的一个成员,并且依附于外部类而存在。
引入原因:内部类能够隐藏起来,不为同一包的其它类所用;内部类可以访问其所在的外部类的所有属性。
Java内部类有以下4种:
成员内部类:
在外部类内,可以访问外部类私有成员。
局部内部类:
在方法中定义的内部类,不能用public/private修饰。
静态内部类:
使用static关键字修饰的内部类。
匿名内部类:
没有名字的内部类,适合只需要使用一次的类。