Java Notes: Java的抽象类和接口
2016-10-02 10:13
211 查看
基础语法:
Java中的抽象类是在class之前,权限之后加个abstract。之所以说抽象,是因为其允许某个方法只声明签名和返回类型。而不必定义函数体。这种方法也称为抽象方法,需要在方法的权限后,加一个abstract。下面是语法例子:
可见,抽象方法只需要声明方法的签名和返回类型即可,普通方法则还需要定义方法体。
抽象类的提出的目的是,让程序员(主要是客户端程序员)明白其实一个基类的角色,更强调这是为这一类事物规定了(抽象出)一系列的属性标准和行为标准,并不是一个具体的事物。因此它不应该被实例化。所以,Java的编译器也规定抽象类不能被实例化。
抽象类可以被继承,继承后的子类如果不实现其中的抽象方法(填充函数体),则还是抽象类。
有一种特殊的抽象类是接口,接口是其中所有方法都是抽象方法且为public、所有数据成员都是static and final的特殊类。接口也可以成为一个与其同名文件的public接口。(这一机制和class一样)
因为所有的数据成员都是static和final的,所以需要在声明的时候就赋值,否则会出错。并这些值会在第一次调用这个接口的时候被初始化一次,并存在静态存储区。
特殊性质:
1)多重继承
接口具有一种特殊的性质,它允许一个类实现多个接口。然而一个类只能有一个父类。
这种性质使得一个实现类可以获得多个接口的方法声明并实现,更好的描述该实现类是一种x的同时,也是一种y和z的关系。
语法:
同时,这个实现类还可以继承一个抽象类或者具体的父类,但需要把extends某个类放在implements接口之前。
2)接口与接口之间的继承
一个接口可以直接用extends去继承多个接口。通过接口的继承,可以拓展上一个接口的内容。注意,一般的继承只能继承抽象类或者具体父类,但对于接口而言,没有这种限制。
3)使用继承+实现的方式书写实现类时,需要注意继承的类和接口类最好不要有同名的方法,否则会造成混淆。
4)向上转型:接口和抽象类与普通的父类一样,可以创建引用指向实例。使得向上转型的作用能更加向上抽象,实现具体实现和客户端代码的松耦合。
设计模式:
与接口和抽象类的松耦合作用息息相关的有两个设计模式,一个是策略模式,另一个是适配器模式。这两个设计模式我会在另一篇文章中提到:
http://blog.csdn.net/firehotest/article/details/52722734
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 Notes: Java的抽象类和接口
- Java Notes: Java的抽象类和接口
- Java Notes: Java的抽象类和接口
- Java Notes: Java的抽象类和接口
- Java Notes: Java的抽象类和接口
- Java Notes: Java的抽象类和接口
- 学JAVA必须知道:抽象类与接口的区别
- 详细解析Java中抽象类和接口的区别
- java面向对象浅析系列2——抽象类、接口与多继承
- java里抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别(来自:java060515) (转)
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- 详细解析Java中抽象类和接口的区别(来自:java060515)
- 详细解析Java中抽象类和接口的区别(来自:java060515)
- java的抽象类和接口分析(转贴自山哥的专栏)
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- 详细解析Java中抽象类和接口的区别(来自:java060515)
- java 的抽象类与接口
- java里抽象类和接口的区别
- java 中的抽象类和接口!