当前位置: 首页 > news >正文

你对网站第一印象delphi7网站开发

你对网站第一印象,delphi7网站开发,好的网站建设商家,一站式推广平台接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口#xff0c;可以只选择实现接口中的 部分方法#xff08;所有的方法都要有#xff0c;可以一部分已经写具体#xff0c;另一部分继续保留抽象#xff09;#xff0c;原因在于#xff1a; 抽象类本身…接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口可以只选择实现接口中的 部分方法所有的方法都要有可以一部分已经写具体另一部分继续保留抽象原因在于 抽象类本身是 不完整的类它可以有未实现的方法即抽象方法因此可以选择不完全实现接口。由继承该抽象类的具体子类去完成未实现的方法。 这也是抽象类的一个强大功能它在实现接口时提供了一个“中间层次”部分实现接口的行为为具体的子类提供基础。 这里有两个箭头指向同一个类例如 AbstractList是因为 接口如 List定义了行为规范接口是用来定义类应该具有的功能和行为例如 List 定义了与列表相关的方法如 add(), get() 等但不提供具体实现。抽象类如 AbstractList提供了部分实现抽象类用于实现接口的一部分行为同时为具体类如 ArrayList 和 LinkedList提供可以复用的代码。 AbstractList 和 List 的区别 List 接口 是一个完全抽象的接口只定义了列表操作的规范。方法如 add(E element), get(int index), remove(int index) 等都只是方法声明没有实现。 AbstractList 抽象类 是一个抽象类实现了 List 接口的大部分通用功能。目的是让具体实现类如 ArrayList 和 LinkedList复用这些功能只需实现特定的方法即可。例如AbstractList 中实现了 addAll()具体类无需再写这部分代码。 示例代码 假设你要实现一个自定义的列表直接实现 List 和继承 AbstractList 的区别如下 直接实现 List 接口 如果从零实现 List 接口你需要定义接口中所有的方法包括很多通用方法比如 size() 和 addAll()。 import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator;public class CustomListE implements ListE {private Object[] elements new Object[10];private int size 0;Overridepublic boolean add(E e) {if (size elements.length) {Object[] newElements new Object[size * 2];System.arraycopy(elements, 0, newElements, 0, size);elements newElements;}elements[size] e;return true;}Overridepublic int size() {return size;}Overridepublic E get(int index) {if (index 0 || index size) {throw new IndexOutOfBoundsException(Index: index);}return (E) elements[index];}// 还需实现 List 中所有的方法如 remove()、iterator() 等工作量很大。 }继承 AbstractList 抽象类 通过继承 AbstractList你只需实现一些关键方法剩下的方法由 AbstractList 提供默认实现。 import java.util.AbstractList;public class CustomListE extends AbstractListE {private Object[] elements new Object[10];private int size 0;Overridepublic E get(int index) {if (index 0 || index size) {throw new IndexOutOfBoundsException(Index: index);}return (E) elements[index];}Overridepublic int size() {return size;}Overridepublic boolean add(E e) {if (size elements.length) {Object[] newElements new Object[size * 2];System.arraycopy(elements, 0, newElements, 0, size);elements newElements;}elements[size] e;return true;}// 不需要手动实现 addAll() 等通用方法AbstractList 已提供默认实现。 }运行示例 public class Main {public static void main(String[] args) {CustomListString list new CustomList();list.add(A);list.add(B);list.add(C);System.out.println(list.get(1)); // 输出: BSystem.out.println(list.size()); // 输出: 3} }为什么 Java 集合框架中要设计接口和抽象类的这种关系 1. 灵活性接口用于定义行为规范 接口如 List允许不同的实现方式适配多种需求例如 ArrayList基于数组实现的列表适合随机访问操作。LinkedList基于链表实现的列表适合插入和删除操作。自定义列表可以实现特定的逻辑比如线程安全或固定容量。 2. 代码复用抽象类减少重复代码 抽象类如 AbstractList避免了在每个实现类中重复编写通用逻辑。例如 size() 的计算逻辑。批量添加方法addAll()的实现。迭代器iterator()的通用实现。 通过这种设计新实现类只需关注特定的细节。 3. 多层次抽象设计 如下图中的设计 接口层 定义行为规范如 List, Collection。抽象类层 提供部分实现如 AbstractList, AbstractCollection。具体类层 提供特定实现如 ArrayList, LinkedList。 这种多层次设计提供了灵活性和代码复用的平衡。 问题 1调用的时候执行的是接口的方法还是抽象类的方法 调用的是 对象的实际实现类中的方法而不是接口或抽象类本身。尽管我们通过 List 这样的接口来引用一个对象但具体执行的代码取决于 对象的具体实现类。 假设我们写了一段代码 ListString list new ArrayList(); list.add(Hello);编译时看接口运行时看实现类 list 的编译时类型是 List所以编译器只会允许你调用 List 接口中声明的方法比如 add()、remove() 等。但 list 的运行时类型是 ArrayList所以具体执行的 add() 方法是 ArrayList 类中定义的实现。 接口 vs 抽象类 List 是接口定义了 add() 的方法规范。AbstractList 是一个抽象类部分实现了 List 的规范并提供了通用实现。但是在 ArrayList 中它直接继承了 AbstractList并可能覆写了某些方法所以最终调用的是 ArrayList 的实现。   为什么我们总是见到 List而没有见过 AbstractList AbstractList 是设计细节 AbstractList 是为具体实现类如 ArrayList 和 LinkedList服务的目的是 减少代码重复。它为实现类提供了一些通用功能比如 默认实现 addAll() 方法。默认实现 iterator() 方法。 但是AbstractList 是抽象的不能直接使用所以开发者不会直接实例化或引用它。 面向接口编程的原则我们习惯通过接口如 List去引用对象这是面向接口编程的核心思想。 default 方法 在 接口 中default 方法允许有具体的实现提供一个方法体。抽象类 中不需要使用 default 关键字因为抽象类本身可以包含普通的具体方法带方法体和抽象方法没有方法体。 为什么 default 方法存在于接口 原本接口中的方法必须全部是抽象的这意味着接口升级时比如增加新方法所有实现这个接口的类都必须修改去实现新增的方法。为了兼容老代码同时给接口增加新功能Java 8 引入了 default 方法。default 方法是为了 在接口中提供默认实现而不破坏已有的实现类。 抽象类和接口在具体方法上的区别 抽象类的普通方法天然支持具体实现不需要额外关键字。接口中的 default 方法则是接口为了支持具体实现而引入的额外能力。 具体对比抽象类和接口中的具体方法 特点抽象类中的具体方法接口中的 default 方法是否需要关键字不需要直接定义普通方法即可需要使用 default 关键字是否可以有具体实现是的普通方法都可以有实现是的default 方法允许提供具体实现是否可以被覆写可以子类可以选择覆写抽象类中的普通方法可以子类可以选择覆写接口中的 default 方法是否强制实现不是子类可以选择继承普通方法的实现或覆写它不是默认继承接口中的 default 方法 default 方法的实际意义 1. 向接口新增方法时的兼容性问题 假设你有一个接口 MyInterface 和两个实现类 interface MyInterface {void methodA(); }class ClassA implements MyInterface {Overridepublic void methodA() {System.out.println(ClassA: methodA);} }class ClassB implements MyInterface {Overridepublic void methodA() {System.out.println(ClassB: methodA);} }如果你需要给 MyInterface 添加一个新方法 methodB所有的实现类ClassA 和 ClassB都必须实现这个方法否则代码无法编译。 2. 使用 default 方法解决兼容问题 在这种情况下可以用 default 方法为新方法提供一个默认实现从而避免修改所有实现类 interface MyInterface {void methodA();// 新增一个 default 方法default void methodB() {System.out.println(Default implementation of methodB);} }class ClassA implements MyInterface {Overridepublic void methodA() {System.out.println(ClassA: methodA);} }class ClassB implements MyInterface {Overridepublic void methodA() {System.out.println(ClassB: methodA);} }运行示例 public class Main {public static void main(String[] args) {MyInterface objA new ClassA();objA.methodA(); // 输出: ClassA: methodAobjA.methodB(); // 输出: Default implementation of methodBMyInterface objB new ClassB();objB.methodA(); // 输出: ClassB: methodAobjB.methodB(); // 输出: Default implementation of methodB} }如果某个实现类需要对 default 方法提供自定义实现可以覆写它 class ClassB implements MyInterface {Overridepublic void methodA() {System.out.println(ClassB: methodA);}Overridepublic void methodB() {System.out.println(ClassB: Custom implementation of methodB);} }运行后 MyInterface objB new ClassB(); objB.methodB(); // 输出: ClassB: Custom implementation of methodB结合数据库任务的实际场景 在你的数据库任务中default 方法可以为某些操作提供通用实现。例如 接口定义 public interface DBOperations {boolean createTable(String tableName, ListString columns);default boolean dropTable(String tableName) {System.out.println([OK] Dropped table: tableName);return true;} }实现类 具体类可以选择覆写或继承接口中的 default 方法或者覆写
http://www.dnsts.com.cn/news/220800.html

相关文章:

  • 拓之朴 做网站多少钱php网站开发实例教程百度
  • wap网站制作怎么做动态域名可以做网站吗
  • 选图片的网站自建电商平台
  • 网站内文章标题格式装个宽带多少钱
  • 湖南省住房和城乡建设厅网站创建微信公众号需要什么
  • 网站建设叁金手指花总1家装网站建设
  • 大学网站建设公司电信备案网站
  • 通付盾 网站建设酒店如何做网站
  • 建站系统开发网站的流量建设
  • 阿里云注册域名北京seo优化分析
  • 西双版纳傣族自治州海拔多少百度seo网站
  • 网站制作 连云港注册安全工程师注册管理系统官网
  • 南昌seo推广外包郑州seo顾问热狗
  • 网站基本建设小程序制作方案书
  • 福州市城乡建设发展总公司网站深圳网络营销公司
  • 众筹平台网站搭建济宁做网站的
  • 免费做网站的网页扬中吧百度贴吧
  • 郴州企业网站建设制作手机装修设计图制作软件
  • 建设工程合同管理多少分及格网站优化方案教程
  • 做影视网站推荐哪个服务器苏州保洁公司哪家比较好
  • 网站设计 wordpress免费行情软件app网站mnw下载
  • 如何优化网站打开速度利用vps做网站
  • 东圃网站建设好看的企业官网
  • 网站如何免费做SEO优化普通网站要什么费用
  • 做男女之间的事情的网站南昌企业网站建设费用
  • 山东舜玉建设工程有限公司网站富锦网站
  • 微科技h5制作网站模板网站建设到一半想换一家
  • 六安网站建设报价方案无锡百度推广开户
  • 做棋牌网站电商小程序报价
  • 香水网站设计网页蓝天使网站建设推广