抽象类和接口的孰是孰非

阅读: 评论:0

抽象类和接口的孰是孰非

抽象类和接口的孰是孰非

  • 背景
      • 抽象类
      • 接口
  • 对比
  • 样例
  • 反思

背景

抽象类

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

对比

抽象类接 口
构造器有构造器不能构造器
实例化可以实例化对象无法实例化对象
实现子类extends继承抽象类,并实现抽象类中声明的所有方法类implements实现接口,需要提供其中声明的所有方法
访问修饰符无限制默认且必须是public static final
继承类无法多继承,但是可以继承多个接口接口可以继承接口,
速度更快因为需要寻找实现方法,比较慢
更新如果要在抽象类中添加新方法,你可以给他提供默认的实现,因此不需要改变其他代码若要在接口中添加方法,那么必须在所有引用该接口的类中实现

样例

//定义的抽象类“建筑”
abstract class  Architecture{protected String name;protected double area;public Architecture(String name,double area){this.name=name;this.area=area;}public void show() {System.out.println("Name: "+name);System.out.println("Area Coveredx: "+area+" square meter");}}
//接口“学校”,为实现这个接口的类确定规范
interface school
{void ShowSchoolMotto();
}
//另一个接口“地址”interface Location
{//default关键词修饰非抽象方法default void ShowSchoolLocation() {System.out.println("Location: NONE");};
}
//可以看到这个类继承了Architecture ,并实现了school,Location接口
class HZNU extends Architecture implements school,Location{int age;String motto;String Location;public HZNU(String name,double area,int age,String schoolmotto,String Location) {super(name, area);this.age==schoolmotto;this.Location=Location;}public void ShowSchoolMotto() {System.out.println("School Motto : "+motto);}public void show() {super.show();System.out.println("Age: "+age+" years");ShowSchoolMotto();ShowSchoolLocation();//因为default 关键词修饰,不需要实现}
}
public class text_1
{public static void main(String[] args){HZNU myCollege=new HZNU("Hangzhou Normal University",2000000,114,"勤慎诚恕·博雅精进","");myCollege.show();}
}

程序输出:

Name: Hangzhou Normal University
Area Coveredx: 2000000.0 square meter
Age: 114 years
School Motto : 勤慎诚恕·博雅精进
Location: NONE

反思

在写文章时查阅的资料上说,存在着一种争论,就是“多态究竟是应该通过抽象继承实现还是通过实现接口实现”,教科书上的说是多态必须有继承,但是现在接口实现多态正在成为一种潮流。

接口作为一种类似模板的作用,限制更少,相对抽象类更加灵活,并且接口可以支持多继承,更加方便地实现一些功能。但是相对的,因为接口只是一种模板,当中没有提供完整的实现方法,需要对每一个实现该接口的类单独实现,并且当你需要修改更新时还要对每一个进行修改。

可以看出,抽象类和多态的引用场景不尽相同,我们在设计程序时要深入思考程序的维护和修改需求,再编写代码。毕竟程序员不是打字员。

本文发布于:2024-01-31 12:27:38,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667526128508.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:孰是孰非   接口   抽象类
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23