对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦)
1,利用接口做参数,写个计算器,能完成+ - */运算
(1)定义一个接口计算含有一个方法int电脑(int, int);
(2)设计四个类分别实现此接口,完成+ - */运算
(3)设计一个类UseCompute,含有方法:公共空间useCom(计算com, int>//父类,并且使用用接口 包cn.yjlblog.wwww; 公共接口计算{ int电脑(int, int);//抽象方法,胜率抽象的,公开的 }
//子类添加实现加法运算 包cn.yjlblog.wwww; 公共类添加实现计算{ @Override//接口的实现类和抽象类的子类是一样的,要想可以使用新的一个对象,就必须对“抽象类”里的方法//进行重写 公共int计算机(int, int) {//TODO自动生成方法存根 返回n + m; } }
包cn.yjlblog.wwww;//子类减实现减法运算 公共类减去实现计算{ @Override 公共int计算机(int, int) {//TODO自动生成方法存根 返回n - m; } }
子类增加实现乘法运算 包cn.yjlblog.wwww; 公共类增加实现计算{ @Override 公共int计算机(int, int) {//TODO自动生成方法存根 返回n * m; } }
包cn.yjlblog.wwww;//子类分为实现整除运算 公共类划分实现计算{ @Override 公共int计算机(int, int) {//TODO自动生成方法存根 返回n/m; } }
//应用类UseComepute用来 包cn.yjlblog.wwww; 公开课UseComepute { 公共空间useCom(计算com, int>//测试类测试 包cn.yjlblog.wwww; 公共类测试{ 公共静态void main (String [] args) { 加州大学=new UseComepute UseComepute();//应用类生成对象,使用useCome方法 int> 公共抽象空白打印机(){ 公共空间open () { system.out.print(“打印机开启”); } 公共空间close () { system.out.print(“打印机关闭”); } 抽象的空白打印();//把印刷方法定义为抽象方法 } 公共HPPrinter延伸打印机{ 无效的print(){//必须重写抽象方法打印() system.out.print(“惠普打印机开始打印”); }; } 公共CanonPrinter延伸打印机{ 无效的print(){//必须重写抽象方法打印() system.out.print(“佳能打印机开始打印”); }; }
<强>(一)语法层次强>
公共抽象类{//关键词抽象,声明该类为抽象类 空白Num (); 文摘无效名称();//声明该方法为抽象方法 } 接口人{ 空白Num (); 无效的名字(); }
抽象类方式中,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,
但是接口方式中,它仅能够有静态,不能修改的成员数据(但是我们一般是不会在接口中使用成员数据),同时它所有的方法都必须是抽象的。
在某种程度上来说,接口是抽象类的特殊化。
对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),但是却可以实现多个接口。
<强>(二)设计层次强>
1,抽象层次不同
抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性,行为,但是接口却是对类局部(行为)进行抽象。
2,跨域不同
抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。我们知道抽象类是从子类中发现公共部分,然后泛化成抽象类,子类继承该父类即可,但是接口不同。实现它的子类可以不存在任何关系,共同之处,例如猫,狗可以抽象成一个动物类抽象类,具备叫的方法,鸟飞机可以实现飞飞接口,具备飞的行为,这里我们总不能将鸟,飞机共用一个父类吧!所以说抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“是”关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已。