Java学习笔记7

 
======================================================================
java
第七天: 接口的作用,接口的思想
======================================================================
(1)
接口的第一种用途: 实现多继承.(最低的要求.)
例子: 就是让某些子类实现这个接口://在已经形成的树状结构,实现再抽象.
1.
在原有的雇员练习上修改代码
公司会给SalaryEmployee每月另外发放2000元加班费,BasePlusSalesEmployee发放1000元加班费
改写原有代码,加入以上的逻辑
并写一个方法,打印出本月公司总共发放了多少加班费;
package test;
publicclass TestEmployee {
       publicstaticvoid main(String[] args) {
              Employee[] es = new Employee[4];
              es[0] = new SalariedEmployee("Liucy", 10, 8000);
              es[1] = new HourlyEmployee("Chenzq", 2, 20, 300);
              es[2] = new SalesEmployee("DuBin", 8, 100000, 0.05);
              es[3] = new BasePlusSalesEmployee("Hanlj", 10, 30000, 0.2, 5000);
              for (int i = 0; i < es.length; i++) {
                     System.out.print(es[i].getName() + ": ");
                     System.out.println(es[i].getSalary(10));
              }
              double result = 0;
              for (int i = 0; i < es.length; i++) {
                     if (es[i] instanceof addAble) {
                            addAble a = (addAble) es[i];
                            result += a.getAddMoney();
                     }
              }
              System.out.println("总共发的加班费是" + result);
       }
}
class Employee {
       private String name;
       privateintbirthday;
       Employee() {
       }
       Employee(String name, int birthday) {
              this.name = name;
              this.birthday = birthday;
       }
       double getSalary(int month) {
              if (month == birthday) {
                     return 100;
              }
              return 0;
       }
       String getName() {
              returnname;
       }
}
interface addAble {
       double getAddMoney();
}
class SalariedEmployee extends Employee implements addAble {
       privateintmonthsalary;
       SalariedEmployee() {
       }
       SalariedEmployee(String name, int birthday, int monthsalary) {
              super(name, birthday);
              this.monthsalary = monthsalary;
       }
       double getSalary(int month) {
              returnsuper.getSalary(month) + monthsalary + getAddMoney();
       }
       publicdouble getAddMoney() {
              return 2000;
       }
}
class HourlyEmployee extends Employee {
       privateinthoursalary;
       privateinthour;
       HourlyEmployee() {
       }
       HourlyEmployee(String name, int birthday, int hoursalary, int hour) {
              super(name, birthday);
              this.hoursalary = hoursalary;
              this.hour = hour;
       }
       double getSalary(int month) {
              double m = 0;
              if (hour >= 160) {
                     returnsuper.getSalary(month) + hoursalary * 160 + 1.5 * hoursalary
                                   * (hour - 160);
              } else
                     returnsuper.getSalary(month) + hoursalary * hour;
       }
}
class SalesEmployee extends Employee {
       privateintsale;
       privatedoublerate;
       SalesEmployee() {
       }
       SalesEmployee(String name, int birthday, int sale, double rate) {
              super(name, birthday);
              this.sale = sale;
              this.rate = rate;
       }
       double getSalary(int month) {
              returnsuper.getSalary(month) + sale * rate;
       }
}
class BasePlusSalesEmployee extends SalesEmployee implements addAble {
       privateintbasesalary;
       BasePlusSalesEmployee() {
       }
       BasePlusSalesEmployee(String name, int birthday, int sale, double rate,
                     int basesalary) {
              super(name, birthday, sale, rate);
              this.basesalary = basesalary;
       }
       double getSalary(int month) {
              returnsuper.getSalary(month) + basesalary + getAddMoney();
       }
       publicdouble getAddMoney() {
              return 1000;
       }
}
======================================================================
(2) 接口的单继承:
接口像一个类的额外的信息().
java的多继承是有主次的,有主类型,附加的类型(副类型[接口]是一个附加信息.)
java中的多继承: 区分主类型和次要类型,接口的引用就使得我们可以对事物的共性,作一个再抽象.抽象出副类型.这种多继承的关系,是不会破坏单继承树状关系的复杂度.
======================================================================
(3) 接口的精华.(没有实现和标准)
最重要的精华,是在于方法没有实现上在于接口是一个标准上,
接口是一种标准.有分工就一定要有接口.接口定义了标准,让分工后的能够  
package test;
publicclass TestJDBC {
       publicstaticvoid main(String[] args) {
              Driver d = getDriver(args[0]); // 这个接口由sun公司制定(多态),把标准的制定者,标准的实现者(二者分离),
              // 标准的使用者.(使用标准.)不同的 [我们是针对接口编程]
              d.connect(); // 传入不同的参数,会调用不同的实现,在这里具体的调用了不同的实现.
       } // 屏蔽接口不同实现的差异.!!!
       publicstatic Driver getDriver(String dbName) {
              if (dbName.equals("MySql"))
                     returnnew MySqlDriver();
              if (dbName.equals("Db2"))
                     returnnew Db2Driver();
              returnnull;
       }
}
// sun公司和数据库厂商,协调出了一个都遵循的标准(接口),接口的定义由sun公司来作,
// 具体的实现由数据库厂商实现
interface Driver { // 这个
       void connect();
}
// MySql
class MySqlDriver implements Driver {
       publicvoid connect() {
              System.out.println("ConnetMySql!!! 呵呵");
       }
}
class Db2Driver implements Driver {
       publicvoid connect() {
              System.out.println("ConnectDb2!! 呵呵");
       }
}
==========================================================
package test;
publicclass TestJDBC2 {
       publicstaticvoid main(String[] args) { // 这样会造成程序和数据库有强藕合的特性.
              MySqlDriver ss = new MySqlDriver(); // 这些代码都要换,造成重复开发.
              ss.connect();
              Db2Driver dd = new Db2Driver();
              dd.getConnect();
       }
}
class MySqlDriver {
       publicvoid connect() {
              System.out.println("ConnetMySql!!! 呵呵");
       }
}
class Db2Driver {
       publicvoid getConnect() {
              System.out.println("ConnectDb2!! 呵呵");
       }
}
======================================================================
package test;
publicclass TestArray {
       publicstaticvoid main(String[] args) {
              int i = Integer.parseInt(args[0]);
              ArrayTool at;
              if (i == 0)
                     at = new ArrayTool1();
              else
                     at = new ArrayTool2();
              User u = new User();
              u.method(at);
       }
}
class User {
       publicvoid method(ArrayTool at) {
              int[] a = { 1, 3, 4, 6, 5, 0, 0, 0 };
              int index = 5;
              a = at.insert(a, index, 2, 7);
              for (int i = 0; i < a.length; i++) {
                     System.out.print(a[i] + "/t");
              }
              System.out.println();
       }
}
class ArrayTool1 implements ArrayTool {
       publicint[] insert(int[] data, int index, int pos, int value) {
              for (int i = index; i > pos; i--) {
                     data[i] = data[i - 1];
              }
              data[pos] = value;
              return data;
       }
}
class ArrayTool2 implements ArrayTool {
       publicint[] insert(int[] data, int index, int pos, int value) {
              int[] data2 = newint[data.length + 1];
              System.arraycopy(data, 0, data2, 0, pos);
              data2[pos] = value;
              System.arraycopy(data, pos, data2, pos + 1, (data.length - pos));
              return data2;
       }
}
interface ArrayTool {
       int[] insert(int[] data, int index, int pos, int value);
}
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炼丹狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值