前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10

【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10

作者头像
陶然同学
发布2023-02-24 13:30:51
2220
发布2023-02-24 13:30:51
举报
文章被收录于专栏:陶然同学博客
String、StringBuffer、StringBuilder的区别

1. String是不可变的,如果尝试去修改,会新⽣成⼀个字符串对象,StringBuffer和StringBuilder是

可变的

2. StringBuffer是线程安全的,StringBuilder是线程不安全的,所以在单线程环境下StringBuilder效

率会更⾼

重载和重写的区别

1. 重载: 发⽣在同⼀个类中,⽅法名必须相同,参数类型不同、个数不同、顺序不同,⽅法返回

值和访问修饰符可以不同,发⽣在编译时。

2. 重写: 发⽣在⽗⼦类中,⽅法名、参数列表必须相同,返回值范围⼩于等于⽗类,抛出的异常

范围⼩于等于⽗类,访问修饰符范围⼤于等于⽗类;如果⽗类⽅法访问修饰符为private则⼦类就不

能重写该⽅法。

代码语言:javascript
复制
public int add(int a,String b)
public String add(int a,String b)
//编译报错

接⼝和抽象类的区别

  • 抽象类可以存在普通成员函数,⽽接⼝中只能存在public abstract ⽅法。
  • 抽象类中的成员变量可以是各种类型的,⽽接⼝中的成员变量只能是public static final类型的。
  • 抽象类只能继承⼀个,接⼝可以实现多个。

接⼝的设计⽬的,是对类的⾏为进⾏约束(更准确的说

是⼀种“有”约束,因为接⼝不能规定类不可以有什么⾏为),也就是提供⼀种机制,可以强制要求

不同的类具有相同的⾏为。它只约束了⾏为的有⽆,但不对如何实现⾏为进⾏限制。

⽽抽象类的设计⽬的,是代码复⽤。当不同的类具有某些相同的⾏为(记为⾏为集合A),且其中⼀

部分⾏为的实现⽅式⼀致时(A的⾮真⼦集,记为B),可以让这些类都派⽣于⼀个抽象类。在这

个抽象类中实现了B,避免让所有的⼦类来实现B,这就达到了代码复⽤的⽬的。⽽A减B的部分,

留给各个⼦类⾃⼰实现。正是因为A-B在这⾥没有实现,所以抽象类不允许实例化出来(否则当调

⽤到A-B时,⽆法执⾏)。

抽象类是对类本质的抽象,表达的是 is a 的关系,⽐如: BMW is a Car 。抽象类包含并实现⼦类

的通⽤特性,将⼦类存在差异化的特性进⾏抽象,交由⼦类去实现。⽽接⼝是对⾏为的抽象,表达

的是 like a 的关系。⽐如: Bird like a Aircraft (像⻜⾏器⼀样可

以⻜),但其本质上 is a Bird 。接⼝的核⼼是定义⾏为,即实现类可以做什么,⾄于实现类主体

是谁、是如何实现的,接⼝并不关⼼。

使⽤场景:当你关注⼀个事物的本质的时候,⽤抽象类;当你关注⼀个操作的时候,⽤接⼝。

抽象类的功能要远超过接⼝,但是,定义抽象类的代价⾼。因为⾼级语⾔来说(从实际设计上来说

也是)每个类只能继承⼀个类。在这个类中,你必须继承或编写出其所有⼦类的所有共性。虽然接

⼝在功能上会弱化许多,但是它只是针对⼀个动作的描述。⽽且你可以在⼀个类中同时实现多个接

⼝。在设计阶段会降低难度

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 重载和重写的区别
  • 接⼝和抽象类的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档