在java程序中,将具有相同属性、方法的事物抽象为一个类。比如人都有姓名、家庭住址、年龄、肤色等等属性,而同时又有行、走、坐、卧等最基本的行为,因此可将这些属性、方法抽象为一个类即Human类。示例代码如下:
public class Human{
/*
*属性
*/
private String name;
private String address;
private int age;
/*
*方法
*/
public void sit(){
// 方法体
}
public void walk(){
// 方法体
}
public void lying(){
// 方法体
}
}
当一个类的属性或行为需要其他类进行交互时,就产生了类与类之间的三种关系:关联、依赖、继承。
1.关联
关联即对象与对象之间的连接。java类之间的关联是一个类的作为另一个的属性被定义,即“has-a”的关系。关联又分为组合与聚合两种。示例如下:
//两个类之间的聚合
public class Car{
}
public class Person{
private Car car;
}
//两个类之间的组合
public class Car{
}
public class Person{
private Car car=new Car();//创建一个Car对象
}
关联又分为单向关联与双向关联,以上代码为单向关联(Person类关联Car类),双向关联(Person类关联Car类,同时Car类关联Person类)代码如下:
public class Car{
private Person per;
}
public class Person{
private Car car;
}
类之间的关联,可以一对一的关联,也可以一对多的关联。
2.依赖
依赖的具体表现是将一个类的对象当做方法参数传给另一个类的方法,是一种use-a的关系。如:
public class Person{
public void dirve(Car car){
}
}
关联与依赖的区别在于:关联是has-a的关系,依赖是use-a的关系;而且关联中Person关联Car,只要Person类对象存在,Car对象就存在;依赖中只有Person类对象调用到dirve()方法时,Car对象才会被创建,方法执行结束后,Car对象就被收回。
3.继承
类与类的另一个关系是继承。继承是一个类的定义基于另一个存在的类,即子类基于父类,如此可实现代码的重用,子类能够继承父类可访问的方法、属性,并能扩展新的能力,而且子类可重写父类方法以满足子类需要。在继承中子类可调用父类的构造方法,子类构造方法总是先调用父类的构造方法,而且默认情况下调用父类的无参构造方法,在子类构造方法的第一行使用super关键字即可调用父类构造方法。示例代码如下:
public class Point {
private double x;
private double y;
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
//无参构造方法
public Point() {
}
//有参构造方法
public Point(double x, double y) {
this.x = x;
this.y = y;
}
//draw()方法
public void draw(){
}
}
public class Circle extends Point {
private double r;
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
//有参构造方法
public Circle(double x, double y) {
super(x, y);
}
public void draw() {
System.out.println("半径为:" + this.r + " x坐标为:" + getX() + " y坐标为:" + getY() + "的圆绘制成功!");
}
}
public class Test {
public static void main(String[] args) {
Circle circle = new Circle(2, 3);
circle.setR(3);
circle.draw();
}
}
输出结果为:半径为:3.0 x坐标为:2.0 y坐标为:3.0的圆绘制成功!