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()); } }