欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java Notes: Java的抽象类和接口,

来源: javaer 分享于  点击 4681 次 点评:56

Java Notes: Java的抽象类和接口,


基础语法:


Java中的抽象类是在class之前,权限之后加个abstract。之所以说抽象,是因为其允许某个方法只声明签名和返回类型。而不必定义函数体。这种方法也称为抽象方法,需要在方法的权限后,加一个abstract。下面是语法例子:


public/(defalut) abstract class Vehicle{
  private seats;
  public abstract void printLogo();
  public void start_Vehicle(){
     ...;
  }
}

可见,抽象方法只需要声明方法的签名和返回类型即可,普通方法则还需要定义方法体。


抽象类的提出的目的是,让程序员(主要是客户端程序员)明白其实一个基类的角色,更强调这是为这一类事物规定了(抽象出)一系列的属性标准和行为标准,并不是一个具体的事物。因此它不应该被实例化。所以,Java的编译器也规定抽象类不能被实例化。


抽象类可以被继承,继承后的子类如果不实现其中的抽象方法(填充函数体),则还是抽象类。


有一种特殊的抽象类是接口,接口是其中所有方法都是抽象方法且为public、所有数据成员都是static and final的特殊类。接口也可以成为一个与其同名文件的public接口。(这一机制和class一样)


public/(default) interface Vehicle{
  void printLogo();
  void addFuel(float liters);//默认都是public且为抽象方法
}

因为所有的数据成员都是static和final的,所以需要在声明的时候就赋值,否则会出错。并这些值会在第一次调用这个接口的时候被初始化一次,并存在静态存储区。


特殊性质:

1)多重继承

接口具有一种特殊的性质,它允许一个类实现多个接口。然而一个类只能有一个父类。




这种性质使得一个实现类可以获得多个接口的方法声明并实现,更好的描述该实现类是一种x的同时,也是一种y和z的关系。


语法:


interface Animal{
  void printClass();
}

interface CanMove{
  void move();
}

public class Dog implements Animal, CanMove{
  public void printName(){
    System.out.println("I am a dog");
  }
  public void Move(){
    System.out.println("Dog Move");
  }
}

同时,这个实现类还可以继承一个抽象类或者具体的父类,但需要把extends某个类放在implements接口之前。


2)接口与接口之间的继承


一个接口可以直接用extends去继承多个接口。通过接口的继承,可以拓展上一个接口的内容。注意,一般的继承只能继承抽象类或者具体父类,但对于接口而言,没有这种限制。


3)使用继承+实现的方式书写实现类时,需要注意继承的类和接口类最好不要有同名的方法,否则会造成混淆。


4)向上转型:接口和抽象类与普通的父类一样,可以创建引用指向实例。使得向上转型的作用能更加向上抽象,实现具体实现和客户端代码的松耦合。


设计模式:


与接口和抽象类的松耦合作用息息相关的有两个设计模式,一个是策略模式,另一个是适配器模式。这两个设计模式我会在另一篇文章中提到:


http://blog.csdn.net/firehotest/article/details/52722734


相关文章

    暂无相关文章
相关栏目:

用户点评