4.4抽象类

来源:互联网 发布:个人网络贷款 编辑:程序博客网 时间:2024/06/06 03:49

1.抽象类的定义:

  • 在日常生活中,我们可以把具有相同性质的事物定义成一个类。交通工具类为例,他的对象可以是:飞机,火车,高铁。这些具体的对象有共同的性质,我们可以把这些具体的对象抽象定义成一个父类,把具体的对象定义成子类。父类中描述的是这些对象的共同特征,他没有够的信息来完整的描述某个对象,这样的类称为抽象类。
  • 抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
  • 100个人同时写同一个类,那有可能写出100个各种各样的类
    但假如从一个抽象类继承,那么写出的类的基础功能大同小异
    在实际开发项目中,主程可以定义一个抽象类,意思给个大致方向
    手下的程序员都要从这个类继承并严格实现,方便交流
  • 抽象类不能实例化,即不能产生抽象的对象(他是一个抽象的概念,没有具体的对象)。
  • 抽象类中的抽象方法只有声明部分没有实现部分(因为不需要实现,抽象类就是为了继承,子类重写抽象方法从而达到多态)。
  • 抽象类中不能定义静态抽象方法,因为抽象方法不能实例化(不会被分配内存)而静态方法在类加载时就会被分配内存。并且静态方法不会被重写。
  • 当一个类继承抽象类,要实现该抽象类中的所有抽象方法,否则该类为抽象类。

抽象类继承的示例:

abstract class A {    abstract void mod1();    abstract void mod2();}class B extends A{    void mod1(){ //B类中重写抽象方法        System.out.println("B1");    }    void mod2(){        System.out.println("B2");    }}class C extends A{    void mod1(){//C类中重写抽象方法        System.out.println("C1");    }    void mod2(){        System.out.println("C2");    }}public class Test{    public static void main(String args[]){        A a=new B();        a.mod1();//调用的是重写的方法。        a.mod2();        a.mod1();        a.mod2();    }}

2.抽象方法的作用

  • 如果父类为抽象类,则子类中都具有的功能在父类中定义,而子类如何实现这个功能,只要实现父类中的抽象方法,即重写。从而形成多态。
    抽象类行成多态的示例
//通过抽象类实现多态!!abstract class Shape{    abstract double getArea();    abstract String getShapeinfo();}class Triangle extends Shape{    double a;    double b;    double c;    Triangle(double a,double b,double c){        this.a=a;        this.b=b;        this.c=c;    }    double getArea(){        double p=(a+b)/2;        return Math.sqrt(p*(p-a)*(p-b)*(p-c));    }    String getShapeinfo(){        return "Triangle:";    }}class Rectangle extends Shape{    double a;    double b;    Rectangle(double a,double b){        this.a=a;        this.b=b;    }    double getArea(){        return a*b;    }    String getShapeinfo(){        return "Rectangle: ";    }}public class AbstractTest{    public void printArea(Shape s){//printArea方法中的参数指向其子类对象并且调用子类重写的方法!        System.out.println(s.getShapeinfo()+s.getArea());    }    public static void main(String args[]){        AbstractTest aot=new AbstractTest();        Shape s=new Triangle(3,4,5);        aot.printArea(s);        s=new Rectangle(5,6);        aot.printArea(s);    }//如果再加一个子类无需改变主类中的方法prinArea(Shape s)只需将新加的类继承父类并实现两个方法就行!
原创粉丝点击