Java Notes: Java的抽象类和接口,
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
相关文章
- 暂无相关文章
用户点评