java类当中一种常见的类之间的关系为关联关系,关联是一种“有”的关系,java类中如果B类对象作为A类的属性存在,称为A类关联B类。关联具有方向性和多重性。关联的方向分为单项关联和双向关联,多重性多见一对一和一对多的关联关系,其中一对多的关联关系最为常见,为了能实现一对多关联关系,就需要使用数据容器来存储数据,常见的数据容器有数组和集合。
java类中另一种关系是依赖关系,依赖关系是一种“使用的关系”,相对关联关系来说依赖关系是一种简单的关系,只用用到了才会创建它,而关联关系中的类是作为属性存在,只要创建了对象就会建立与之关联的关系对象。
java类中更重要的关系是继承关系,称为“IS - A”的关系,即子类对象是父类类型的一个对象,通过继承子类可以重复使用父亲的属性和方法。其中涉及到了构造方法调用等问题,还有提出了抽象类,抽象方法,含有抽象方法的类一定是抽象类,抽象方法是没有方法体的,具体方法体在各自继承的子类中定义,此外还有方法覆盖和方法重载,方法覆盖即子类声明了一个方法,其访问权限,返回值,方法名和参数列表与父类中的方法完全一致,这样就实现了方法覆盖,方法重载与之前的做法是一致的,只有参数列表不同,返回值和方法名都相同。
运行结果如下:
具体测试代码如下:
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());
}
}