面向抽象的编程思想

2016-05-26 23:37 阅读 3,426 次 评论 0 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1767.html

一.摘要

面向抽象的编程思想,在一个类中传入抽象类对象或接口对象,然后使用对象调用抽象方法实现某个功能,然后再需要使用该类的地方重写抽象类方法或接口方法,实现我们需要的业务需求。面向抽象的编程思想使我们不用关心具体的东西是什么,富有弹性,根据具体的需求重写父类或接口中的方法。

抽象类的特点是:

1.无法使用关键字new创建对象

2.抽象类中可以包含abstract方法和非abstract方法

3.某个抽象类的子类非抽象类,必须重写父类的所有abstract方法

4.抽象类声明,子类非抽象类创建,做上转型对象

二.方法的重写

子类或实现类中声明的方法名,传入参数类型,传入参数个数和父类或接口的一样,这样的方法叫做重写父类或接口的方法。方法的重写(未使用super关键字)会覆盖父类或接口声明的方法,在面对抽象的编程思想中使得声明的抽象对象能够调用重写的方法,那么重写的方法就会覆盖抽象类或接口的抽象方法。

三.简单Demo

现在我们需要计算一个底部是圆的柱体的体积,实现思路是先计算圆的面积,然后乘以柱体的高度,具体的代码:

  1. /** 
  2.  *创建一个计算圆面积的Circle类 
  3.  * 
  4.  */  
  5. public class Circle {  
  6.        private double r;  
  7.        Circle(double r){  
  8.              this.r=r;  
  9.        }  
  10.        //计算圆的面积  
  11.        public double getArea(){  
  12.              return (3.14*r*r);  
  13.        }  
  14. }  
  1. /** 
  2.  *创建一个计算柱体面积的Pillar类 
  3.  * 
  4.  */  
  5.  public class Pillar{  
  6.         Circle circle;  
  7.     double height;  
  8.         Pillar(Circle circle,double height){  
  9.             this.circle=circle;  
  10.         this.height=height;  
  11.         }  
  12.     public double getVolumn(){  
  13.            return circle.getArea()*height;  
  14.     }  
  15. }  

但是如果需要计算底部是矩形的柱体的体积,同样的实现方法是先计算矩形的面积,然后乘以柱体的高度。因为Pillar类的设计是面对具体的Circle类,要实现底部是矩形或其正方形的柱体的体积,需要设计Pillar类面向抽象的Geometry类,在Geometry类的子类中重写getArea()方法,计算圆形,矩形或正方形的面积,面向抽象的编程思想可以很好的满足我们这样的需求,实现代码:

  1. /** 
  2.  *创建一个计算圆面积的Geometry抽象类 
  3.  * 
  4.  */  
  5. public abstract class Geometry {  
  6.        private double r;  
  7.        Geometry(double r){  
  8.              this.r=r;  
  9.        }  
  10.        //计算圆的面积  
  11.        public double getArea();  
  12. }  
  1. /** 
  2.  *创建一个面向抽象类的的Pillar类 
  3.  * 
  4.  */  
  5.  public class Pillar{  
  6.         private Geometry geometry;  
  7.     private double height;  
  8.         Pillar(Geometry geometry,double height){  
  9.             this.geometry=geometry;  
  10.         this.height=height;  
  11.         }  
  12.     public double getVolumn(){  
  13.            return geometry.getArea()*height;  
  14.     }  
  15. }  
  1. /** 
  2.  *创建一个Geometry的子类Rectangle 
  3.  * 
  4.  */  
  5. public class Rectangle extends Geometry{  
  6.        double width;  
  7.        double height;  
  8.        Rectangle(double width,double height){  
  9.               this.width=width;  
  10.           this.height=height;  
  11.        }  
  12.        @Override  
  13.        public double getArea(){  
  14.               return width*height;  
  15.        }  
  16. }  
  1. /** 
  2.  *创建一个Application计算柱体的体积 
  3.  * 
  4.  */  
  5.  public class Application{  
  6.         public static void main(String[] args){  
  7.            Geometry geometry=new Rectangle(10.0,12.0);  
  8.            Pillar pillar=new Pillar(geometry,12.0);  
  9.            double volumn=pillar.getVolumn();  
  10.            System.out.println("矩形底的柱体的体积:"+volumn);  
  11.     }  
  12.  }  
关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1767.html
分类:Java基础 标签:
浅谈DMS 浅谈DMS
如何使用手机支付给羊城通充值 如何使用手机支付给羊城通充值
“Faild to load the JNI shared Library”解决办法 “Faild to load the JNI sh
浅谈SQLite数据库的操作 浅谈SQLite数据库的操作

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情