Java基础—Day12——接口

Java基础—Day12

1.面向对象复习

1.1 对象和类

    类:编写代码的基本单元,对应的是一个模块,只要按照它的语法去设计这样的一个模块,从现实中具体的实体(对象)抽象出来。抽象出来静态特征和动态特征【属性和方法】

    对象:现实中的一个个真实存在。比如XXX地方的张三,这个人是存在。

    根据实际场景去提取属性和方法。

1.2 封装

    你可以随意操作属性,比如上面买投影仪,人家还要倒贴钱给你,肯定是不靠谱的。所以为了不让你随意修改属性!所以要赢藏起来。用paivate修饰,又要获取和修改属性值,通过getXxx和setXxx方法。可以在setXxx中加入必要的逻辑判断。

    好处:不允许直接操作属性,安全

1.3 包

    使用层面:用它来管理你的源码。还可以起到权限控制

    命名规范:小写(一般都是使用字母)、域名导致

    引入其他包中的类:import、同名的多个,通过全类名引入

1.4 继承

    好处:抽取共性【属性、方法】 --》父类--》类的设计

    建立关系:extends

    特点:

  1. 单根,一个亲爹
  2. 多层,家族树
  3. 先父后子

    方法重写:没有强制性,方法体可能也已知

    前提:继承、实现(接口)

    特点:方法名一样,参数列表相同,访问修饰符不能严于父类,返回值相同或者子类类型,异常相关

    抽象:
    ①抽象方法:只能定义方法签名 修饰符 返回值类型 名称(形参列表)

    方法:简单的说方法就是完成特定功能的代码块
    很多代码,实现某个功能,我们为了让调用者调用方法,重复调用,将其用黑盒子抱起来,对外提供的这个功能,我们就称为方法。开发人员,你就是这个方法的设计者。

    豆浆机:
    方法:榨汁【怎么转、转多长时间】,水【自来水、污水】、豆子---》 未知量---》 形参列表---》形参如何定义---》语法
    是否有返回值:如何自己喝,高根棍子---》 不需要返回值---》这个执行完的结果,不需要给别人使用
    有返回值:搞个杯子借助---》变量,留着自己喝(sout),也可以给别人喝(赋给了一个变量或者表达式,直接sout)

    ②抽象类:语法有要求,必须在抽象类中 abstrac
   
特点:本质还是一个类,用于继承(共性) ---》类的设计
    有哪些成员:普通类有什么,它就可以有什么,甚至更多。

    目前讲了几个成员:

  1. 成员变量
  2. 方法:普通方法、构造方法
  3. 代码块:普通代码块、静态代码块 ---》执行顺序

    模板方法设计模式:基本代码要会写

1.5 Object

    toString():直接打印对象名,实际就是调用to String,所以重写之后,再去调用toString,多余

    equals:比较的是啥,可以根据实际需要去重写   equals vs ==

    hashCode:一般跟equals一起重写,一般可以快捷键直接生成

1.6 关键字

    final:使用层面比较简单,如何选用也不难

  1. 类:最终类,不允许被继承,一般封装在一个工具集,一般不轻易给别人修改,比如JDK
  2. 方法:不允许被重写
  3. 变量:即常量,基本类型  如果是引用类型的话,它的地址值不能修改,但是不影响使用自己内部的元素【方法、属性】

    static:

  1. 成员变量:类变量,一般使用类名调用,即使能用对象调用,也不建议【有可能会破坏这个值】,一般会结合final去定义,只能通过类名调用。共享数据
  2. 方法:一般在工具类中去定义
  3. 代码块:做一些初始化操作
  4. 修饰类:内部类

1.7 多态

    多态:父类引用指向子类对象。  父类  变量名 = new 子类()

    好处:扩展性、维护性

    向上转型:

    向下转型:

  • 为什么:多态弊端的存在,导致子类不能调用自己特有的方法,此时若需要调用子类方法,得把皮拔掉,还原本质---》子类对象自身
  • 如何用:大类型---》小类型---》语法层面   子类 aa ==(子类)父类引用
  • 注意点:判断类型是否兼容 a instanceof Ba这个对象是B这个类的实例吗

    应用场景:

  1. 作为形参定义:调用方法传递的实参是:子类对象
  2. 作为返回值:统一用父类接受
  3. 作为成员变量:就不关心子类是谁了---》涉及到类与类之家的关系【继承、组合、聚合、实现】

2. 接口

2.1 为什么要使用接口

2.2 什么是接口

需求:防盗门TheftDoor,本质上是门,锁只是它的一个扩展功能。

接口也是三大引用类型之一: 类、接口、数组 。接口可以看成是对方法的一个封装,即在接口中,我们 通常定义方法,只关心方法,而不关心,这个接口被谁使用【即作为功能扩展】,即哪个类实现该接口。
 
语法定义: 通过 interface 关键字去定义接口 interface A
 
类跟接口之间建立关系: class A implements B ,一个类可以实现多个接口 implements Lock,Ling
 

2.3 接口的特点

1. 接口是否支持多继承 interface C extends B,A

2. 方法

  1. 抽象方法: 默认会给我们加 public abstract ,所以我们就没有必要再写了, JDK7 之前
  2. default 修饰的方法:好处,可以扩展接口的功能,同时又不强制实现类必须实现方法JDK8开始支持
  3. private 修饰的方法: JDK9 开始支持的方法,没什么鸟用, JDK9 JDK10 ,就是一个鸡肋;JDK8和JDK11用的比较多
  4. 可以使用 static 修饰方法,可以将接口看成是一个工具类

3.变量

   为全局变量,默认会给我们加上 public static final

2.4 接口的应用场景

  1. 作为功能的扩展,即在接口中定义方法。跟类的关系: has a 的关系,一般是我们用的比较多的。
  2. 接口也是一种约定/规范,典型 Serializable Cloneable ,该接口就是一个空接口,作用就是能够实现对象的序列化(将对象保存到文件中)和反序列化(从文件中将对象读取出来)。比如哪一天你也能写一个JDK,你可以自己定义规范。

2.5 接口 vs 抽象类

抽象类仍然是一个类,在创建新类时只能继承它一个。而创建的过程可以实现多个接口。

有一条实际经验:尽可能地抽象。因此,更倾向使用接口而不是抽象类。只有必要时才使用抽象类。除非必须使用,否则不要用接口和抽象类。大多数时候,普通类已经做得更好,如果不行的话,再移动到接口或抽象类中。

3.原型模式

抄作业,有可能一模一样。 深克隆 浅克隆
若不实现 Cloneable ,虽然我们重写了 clone 方法,但是在调用的时候,会报错!
CloneNotSuport.... ,即不支持克隆功能。
 
浅克隆:clone的一模一样,若抄袭者修改了内容,被抄袭者 的作业也被改了,【一个类中关联了
另一个引用类型,修改的是引用类型的某个属性值】----因为,clone过来的那个引用类型的地址值
是一样的。实现Cloneable接口并重写clone接口只能进行浅克隆

深克隆:clone过来的内容一样,但是两者隶属于不同的对象,各自修改内容,互不影响
组合和聚合:现实生活中,人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。人和他的电脑 是聚合关系。
 

4. 作业

需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、 上网。使用接口实现手机功能。

测试及结果:

2.

需求:计算机的主要组成部分( CPU 、硬盘、内存)
定义 CPU 的接口 CPU ,返回 CPU 品牌和主频,方法给返回值也行,直接打印也行
定义内存的接口 EMS ,返回类型和容量
定义硬盘的接口 HardDisk ,返回容量
编写各组件厂商分别实现 CPU EMS HardDisk 接口
编写计算机类,组装计算机并显示相关信息
编写测试类运行
 
 
 
 
测试及结果:
     
 
3. 行星
 
语法点:接口,多态
按步骤编写代码,效果如图所示:
 
编写步骤
1. 定义接口 Universe ,提供抽象方法 doAnything
2. 定义普通类 Star ,提供成员发光 shine 方法
3. 定义普通类 Sun ,继承 Star 类,实现 Universe 接口
4. 测试类中,创建 Star 对象,调用 shine 方法
5. 测试类中,多态的方式创建 Sun 对象,调用 doAnything 方法,向下转型,调用 shine 方法。
 
 
 
 
测试及结果:
 
 
 
 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值