java接口和抽象类

来源:互联网 发布:剑网3成男捏脸数据分享 编辑:程序博客网 时间:2024/06/06 17:51

      接口实现了定义和实现的分离,换句话说,接口就是没有属性和行为实现的类。对于接口而言,就是用来标记类的一个产物。每个接口都对应有一个或多个实现它的类,否则这个接口就成为冗余代码。管理接口比管理类要简单挺多,接口就由此体现了抽象的观点。类实现多个接口,可以解决类不能继承多个类的机制。

一 接口的作用 
1. Java多态接口动态加载实例 
这种实现方式,大家在很多场合下都可以见到。下面介绍一个Sample: 

接口类: 

public interface PersonService {      /**      * 计算每月的工资      *  sal:工资基数      *  type:员工等级      */      public double calcuMonthlySalary(double sal, int type);        } 

实现类:

class Factory {        public static PersonService getInstance(String className) {            PersonService p = null;            try {                p = (PersonService) Class.forName(className).newInstance();            } catch (Exception e) {                e.printStackTrace();            }            return f;        }           public static void main(String args[]) {            PersonService p = Factory.getInstance("org1.Apple");            p.calcuMonthlySalary();        }    }  

 添加了一个新的类之后,就不需要再修改工厂类Factory了


2. Java接口作为参数传递 

public class SalaryManager {    /**  *   */  public SalaryManager() {  }    public void getMonthlySalary(PersonService personService, Person person){      personService.calcuMonthlySalary(person.getSal(), person.getType());  } 


二  接口与抽象类的区别 

   我个人认为有以下几点: 
  • abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。这弥补了类的多继承问题。 
  • 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。 
  • abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。 注意:当一个行为与一个类的所属行为方法不相关联时,应该采用接口来实现这个行为,不能使用抽象类,否则违反面向对象的ISP(Interface Segregation Principle)规则和OCP原则
  • 实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
  • 接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
  • 接口中的方法默认都是 public,abstract 类型的。
0 0
原创粉丝点击