一.摘要
面向抽象的编程思想,在一个类中传入抽象类对象或接口对象,然后使用对象调用抽象方法实现某个功能,然后再需要使用该类的地方重写抽象类方法或接口方法,实现我们需要的业务需求。面向抽象的编程思想使我们不用关心具体的东西是什么,富有弹性,根据具体的需求重写父类或接口中的方法。
抽象类的特点是:
1.无法使用关键字new创建对象
2.抽象类中可以包含abstract方法和非abstract方法
3.某个抽象类的子类非抽象类,必须重写父类的所有abstract方法
4.抽象类声明,子类非抽象类创建,做上转型对象
二.方法的重写
子类或实现类中声明的方法名,传入参数类型,传入参数个数和父类或接口的一样,这样的方法叫做重写父类或接口的方法。方法的重写(未使用super关键字)会覆盖父类或接口声明的方法,在面对抽象的编程思想中使得声明的抽象对象能够调用重写的方法,那么重写的方法就会覆盖抽象类或接口的抽象方法。
三.简单Demo
现在我们需要计算一个底部是圆的柱体的体积,实现思路是先计算圆的面积,然后乘以柱体的高度,具体的代码:
- /**
- *创建一个计算圆面积的Circle类
- *
- */
- public class Circle {
- private double r;
- Circle(double r){
- this.r=r;
- }
- //计算圆的面积
- public double getArea(){
- return (3.14*r*r);
- }
- }
- /**
- *创建一个计算柱体面积的Pillar类
- *
- */
- public class Pillar{
- Circle circle;
- double height;
- Pillar(Circle circle,double height){
- this.circle=circle;
- this.height=height;
- }
- public double getVolumn(){
- return circle.getArea()*height;
- }
- }
但是如果需要计算底部是矩形的柱体的体积,同样的实现方法是先计算矩形的面积,然后乘以柱体的高度。因为Pillar类的设计是面对具体的Circle类,要实现底部是矩形或其正方形的柱体的体积,需要设计Pillar类面向抽象的Geometry类,在Geometry类的子类中重写getArea()方法,计算圆形,矩形或正方形的面积,面向抽象的编程思想可以很好的满足我们这样的需求,实现代码:
- /**
- *创建一个计算圆面积的Geometry抽象类
- *
- */
- public abstract class Geometry {
- private double r;
- Geometry(double r){
- this.r=r;
- }
- //计算圆的面积
- public double getArea();
- }
- /**
- *创建一个面向抽象类的的Pillar类
- *
- */
- public class Pillar{
- private Geometry geometry;
- private double height;
- Pillar(Geometry geometry,double height){
- this.geometry=geometry;
- this.height=height;
- }
- public double getVolumn(){
- return geometry.getArea()*height;
- }
- }
- /**
- *创建一个Geometry的子类Rectangle
- *
- */
- public class Rectangle extends Geometry{
- double width;
- double height;
- Rectangle(double width,double height){
- this.width=width;
- this.height=height;
- }
- @Override
- public double getArea(){
- return width*height;
- }
- }
- /**
- *创建一个Application计算柱体的体积
- *
- */
- public class Application{
- public static void main(String[] args){
- Geometry geometry=new Rectangle(10.0,12.0);
- Pillar pillar=new Pillar(geometry,12.0);
- double volumn=pillar.getVolumn();
- System.out.println("矩形底的柱体的体积:"+volumn);
- }
- }
你可能感兴趣的文章
来源:TeachCourse,
每周一次,深入学习Android教程,关注(QQ158#9359$239或公众号TeachCourse)
转载请注明出处: https://www.teachcourse.cn/1767.html ,谢谢支持!
转载请注明出处: https://www.teachcourse.cn/1767.html ,谢谢支持!