接口 内部类 常用API

面向对象进阶

接口

接口可以写什么

jdk8前只有:常量 + 抽象方法
jdk8后增加:

  • 默认方法:default修饰,实现类对象调用。
  • 静态方法:static修饰,必须用当前接口名调用
  • 私有方法:private修饰,jdk9开始才有的,只能在接口内部被调用。
  • 他们都会默认被public修饰。
    为什么要增加:一个接口增加一个抽象方法后,所有实现类都需要实现,太麻烦了,所以允许接口中中直接定义带有方法体的方法
    应用:
    JDK8新增的3种方法我们自己在开发中很少使用,通常是Java源码涉及到的,我们需要理解、识别语法、明白调用关系即可

接口和接口的关系

接口继承接口:多继承
类继承类:单继承
类实现接口:多实现

接口的注意事项

1、接口不能创建对象
2、一个类实现多个接口,多个接口的规范不能冲突
2、一个类实现多个接口,多个接口中有同样的静态方法不冲突。
3、一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法,默认用父类的。
4、一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可。
5、一个接口继承多个接口,是没有问题的,如果多个接口中存在规范冲突则不能多继承。

内部类

最佳实践:什么时候使用静态内部类

  • 如果一个类中包含了一个完整的成分,如汽车类中的发动机类。
  • 特点、使用与普通类是一样的,类有的成分它都有,只是位置在别人里面而已。
  • 访问总结:可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。
  • 注意:开发中实际上用的还是比较少。

成员内部类的特点

  • 无static修饰,属于外部类的对象。
  • 可以直接访问外部类的静态成员,实例方法中可以直接访问外部类的实例成员
  • 外部类名.内部类名 对象名 = new 外部类构造器.new 内部类构造器();
  • 在成员内部类中访问所在外部类对象 ,格式:外部类名.this
    比如要在以下内部类中访问外部类的属性,需要写People.this.haertbeat
    在这里插入图片描述

匿名内部类如何实现

  • 匿名内部类是一个没有名字的内部类,同时也代表一个对象
  • 匿名内部类的对象类型,相当于是当前new的那个类型的子类类型
  • 比如下图中,创建了一个匿名内部类,是Employee 类的子类对象

在这里插入图片描述

最佳实践:什么时候使用匿名内部类

匿名内部类可以作为一个对象,直接传输给方法
匿名内部类通常是在开发中调用别人的方法时,别人需要我们写的时候才会定义出来使用。
匿名内部类还可以使用lamda进一步的简化代码

常用API

toString()方法默认返回什么

默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
这对开发没有意义,我们需要的是返回对象的内容。因此子类必须重写此方法返回对象的内容。

equals()方法默认返回什么

默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false
这对开发没有意义,我们需要的是返回对象的内容进行比较。因此子类必须重写此方法,比较对象的内容。

最佳实践:字符串比较时使用 Objects.equals(),而不是字符串的equals() 方法

源码中 Objects.equals() 进行对象判空,而字符串的equals() 方法没有进行判空

在这里插入图片描述

最佳实践:字符串拼接操作的时候,应使用StringBuilder 而不是 String

String 对象每拼接一次,就会产生两个对象,StringBuilder 对象和String对象。拼接次数越多,产生的对象都会成两倍
在这里插入图片描述
StringBuilder对象无论拼接多少次,都只有一个对象。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值