java类当中一种常见的类之间的关系为关联关系,关联是一种“有”的关系,java类中如果B类对象作为A类的属性存在,称为A类关联B类。关联具有方向性和多重性。关联的方向分为单项关联和双向关联,多重性多见一对一和一对多的关联关系,其中一对多的关联关系最为常见,为了能实现一对多关联关系,就需要使用数据容器来存储数据,常见的数据容器有数组和集合。

java类中另一种关系是依赖关系,依赖关系是一种“使用的关系”,相对关联关系来说依赖关系是一种简单的关系,只用用到了才会创建它,而关联关系中的类是作为属性存在,只要创建了对象就会建立与之关联的关系对象。

java类中更重要的关系是继承关系,称为“IS - A”的关系,即子类对象是父类类型的一个对象,通过继承子类可以重复使用父亲的属性和方法。其中涉及到了构造方法调用等问题,还有提出了抽象类,抽象方法,含有抽象方法的类一定是抽象类,抽象方法是没有方法体的,具体方法体在各自继承的子类中定义,此外还有方法覆盖和方法重载,方法覆盖即子类声明了一个方法,其访问权限,返回值,方法名和参数列表与父类中的方法完全一致,这样就实现了方法覆盖,方法重载与之前的做法是一致的,只有参数列表不同,返回值和方法名都相同。

 运行结果如下: 

java对应项连接 java类的关联_java对应项连接

  

具体测试代码如下:

public abstract class Employee {   //抽象类 员工类
	private String name;//定义属性 3个
	private double salary;
	private static int count=0;
	{
		count++;
		System.out.print("创建了一个对象");
		System.out.println(count);
	}
	public Employee()//构造方法 3种 重载 
	{
		System.out.println("调用父类构造方法");
	}
	public Employee(String name)
	{
		System.out.println("调用父类构造方法:可设置姓名");
		this.name=name;
	}
	public Employee(String name,double salary){
		System.out.println("调用父类构造方法:可设置姓名和薪水");
		this.name=name;
		this.salary=salary;
	}
	public String getName()//定义方法 4个
	{
		return name;
	}
	public void setName(String name)
	{
		this.name = name;
	}
	public double getSalary()
	{
		return salary;
	}
	public void setSalary(double salary)
	{
		this.salary = salary;
	}
	public abstract void setSalary(char leaver);
	
	
}


public  class engineer extends Employee {
	private int cole;
	public engineer(){
		System.out.println("调用了engineer的类似默认构造方法!");
	}
	public engineer(String name,double salary,int cole){
		super(name,salary);
		this.cole=cole;
		System.out.println("调用了engineer的构造方法二:设置姓名和薪水,排量!");
		
		
	}
	public void setSalary(char level) {
		switch (level){
		case 'a' :setSalary(getSalary()*1.5);
			break;
		case 'b' :setSalary(getSalary()*1.6);
			break;
		case 'c' :setSalary(getSalary()*1.7);
			break;
					 }
	}

}



public class sales extends Employee {
	int task;
	public sales(){
		System.out.println("调用了sales的类似默认构造方法!");
	}
	public sales(String name,double salary,int task){
		super(name,salary);
		this.task=task;
		System.out.println("调用了sales的构造方法二:设置姓名和薪水,任务量!");	
	}
	
	public  void setSalary(char leaver){
		switch (leaver){
		case 'a' :setSalary(getSalary()*1.1);
			break;
		case 'b' :setSalary(getSalary()*1.2);
			break;
		case 'c' :setSalary(getSalary()*1.3);
			break;
					 }
	}

}
 
 
public class 公司 {
	public static void main(String[] args){
		engineer li=new engineer("李四",5000,5);
		sales mao=new sales("张三",4000,5);
		System.out.println("姓名:"+li.getName()+" 薪水"+li.getSalary());	
		System.out.print("调整前薪水为"+li.getSalary());
		li.setSalary('b');
		System.out.println("调整后薪水为"+li.getSalary());
		
		System.out.println("姓名:"+mao.getName()+" 薪水"+mao.getSalary());	
		System.out.print("调整前薪水为"+mao.getSalary());
		mao.setSalary('a');
		System.out.print("调整后薪水为"+mao.getSalary());		
	}
}



 
 
public class 公司 {
	public static void main(String[] args){
		engineer li=new engineer("李四",5000,5);
		sales mao=new sales("张三",4000,5);
		System.out.println("姓名:"+li.getName()+" 薪水"+li.getSalary());	
		System.out.print("调整前薪水为"+li.getSalary());
		li.setSalary('b');
		System.out.println("调整后薪水为"+li.getSalary());
		
		System.out.println("姓名:"+mao.getName()+" 薪水"+mao.getSalary());	
		System.out.print("调整前薪水为"+mao.getSalary());
		mao.setSalary('a');
		System.out.print("调整后薪水为"+mao.getSalary());		
	}
}