网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 前端脚本 » 正文

抽象类,抽象类和接口的区别

2020-3-6 15:55:19 | 作者:老铁SEO | 0个评论 | 人浏览

  抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。


  作用:通常在编程语句中用abstract修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。


  抽象类里面可以有非抽象方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽像类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。


  不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。


  在使用抽象类时需要注意几点:


  1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。


  2、抽象方法必须由子类来进行重写。


  3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。


  4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。


  5、子类中的抽象方法不能与父类的抽象方法同名。


  6、abstract不能与final并列修饰同一个类。


  7、abstract不能与private、static、final或native并列修饰同一个方法。


  抽象类和接口的区别


  “抽象类”和“接口”的区别:


  1、接口可以被多重implement*,抽象类只能被单一extends。


  2、接口只有定义,抽象类可以有定义和实现。


  3、接口的字段定义默认为:publicstaticfinal,抽象类字段默认是“friendly”。


  4、接口没有构造方法,抽象类可以有构造方法。


  抽象类


  抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。


  接口


  接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。


  语法定义层


  在abstractclass方式中,Demo可以有自己的数据成员,也可以有非abstract的成员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员,所有的成员方法都是abstract的。


  编程层面


  abstractclass在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。


  设计理念层面


  abstractclass在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"isa"关系,即父类和派生类在概念本质上应该是相同的。


  对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约(功能)而已。


  ——java抽象类


  importnew——Java抽象类与接口的区别


  抽象类可以实例化吗


  抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。你上面这个其实是在抽象类内部实例化,重新的抽象方法,但是这个有什么意义呢?


  不可以的,因为他需要子类来实现初始化


  抽象类的特点


  包含一种或多种抽象方法的类,不需要构造实例。定义抽象类后,其它类可以对它进行扩充并且通过实现其中的抽象方法,使抽象类具体化


  没找着它的特点,几乎都是它跟接口的区别


  以下URL有很多抽象类的资料


  ju.qihoo/3255644/a_txt_3255652


  www.51cto/html/2005/0810/217


  抽象类可以有构造方法吗


  当然可以,只是不能直接创建抽象类的实例对象而已


  1、如果在父类中(这里就是你的抽象类)中显示的写了有参数的构造函数,在子类继承是就必须写一个构造函数来调用父类的构造函数


  例子:


  abstractclassPerson{//定义一个抽象类,必须被继承


  Person(inti){


  }


  }


  publicclassStudentextendsPerson{


  Student(){


  super(inti)://必须显示的调用父类构造方法//super代表父类对象


  }


  }


  2、如果父类中有没有参数的构造函数,在子类中可以不显示的写父类的构造函数,Java会自动调用没有参数的构造函数


  例子:


  abstractclassPerson{//定义一个抽象类,必须被继承


  Person(){//此构造函数也可以不写,Java会默认添加一个没有参数的构造函数


  }


  }


  publicclassStudentextendsPerson{


  Student(){


  //super();//可以不写,Java会自己调用这个super()方法


  }


  }

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐