您的位置:首页 > 编程语言 > Java开发

Java Notes: Java的抽象类和接口

2016-10-02 10:13 211 查看
基础语法:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 接口 抽象类