11.面向对象(3)

news/2024/9/21 20:53:14/文章来源:https://www.cnblogs.com/swh666/p/18396545

MODULE 11 面向对象

  1. 会定义接口
  2. 会在接口中定义抽象方法,默认方法,静态方法,成员变量
  3. 会调用接口中的成员
  4. 会利用多态的方式new对象
  5. 知道多态的前提
  6. 要知道使用多态的好处
  7. 会在多态的前提下,向下转型
  8. 会利用instanceof判断类型

一.接口

(一)接口的介绍

1.接口:是一个引用数据类型,是一个标准,规则

2.关键字:

(1)interface接口

public interface 接口名{}

(2)implements 实现

实现类 implements 接口名{}

3.接口中可以定义的成员

(1)jdk7以及之前:

抽象方法:public abstract -> 即使不写public abstract,默认也有

成员变量:public static final 数据类型 变量名 = 值 -> 即使不写 public static final,默认也有

final是最终的,被final修饰的变量不能二次赋值,所以我们一般将 final修饰的变量视为常量

(2)jdk8:

默认方法:public default 返回值类型 方法名(形参){}

静态方法:public static 返回值类型 方法名(形参){}

(3)jdk9开始:

` 私有方法:private的方法

(二)接口的定义以及使用

1.定义接口:

public interface 接口名{}

2.实现:

public class 实现类类名 implements 接口名{}

3.使用:

(1)实现类实现接口

(2)重写接口中的抽象方法

(3)创建实现类对象(接口不能直接new对象)

(4)调用重写的方法

(三)接口中的成员

1.抽象方法

(1)定义格式

public abstract 返回值类型 方法名(形参);

(2)注意

不写public abstract 默认也有

(3)使用

A.定义实现类,实现接口

B.重写抽象方法

C.创建实现类对象,调用重写的方法

2.默认方法

(1)格式:

public default 返回值类型 方法名(形参){

方法体

return 结果

}

(2)使用

A.定义实现类,实现接口

B.默认方法可重写,可不重写

C.创建实现类对象,调用默认方法

3.静态方法

(1)格式

public static 返回值类型 方法名(形参){

方法体

return 结果

}

(2)使用

接口名直接调用

默认方法和静态方法 -> 可以作为临时加的一个小功能

4.成员变量

(1)格式

public static final 数据类型 变量名 = 值

(2)相关知识点:final

final代表最终的,被它修饰的变量,不能二次赋值,可以视为常量

(3)特点

不写public static final默认也有

(4)使用

接口名直接调用

(5)注意

A.被static final修饰的成员变量需要手动赋值

B.习惯上我们会将static final修饰的成员变量名大写

(四)接口的特点

1.接口可以多继承 -> 一个接口可以继承多个接口

public interface InterfaceA extends InterfaceB,InterfaceC{}

2.接口可以多实现 -> 一个实现类可以实现一个或者多个接口

public class InterfaceImp1 implements InterfaceA,InterfaceB{}

3.一个子类可以继承一个父类的同时实现一个或多个接口

public class Zi extends Fu implements InterfaceA,InterfaceB{}

4.注意:

继承也好,实现接口也罢,只要是父类中或者接口的抽象方法,子类或者实现类 都要重写

当一个类实现多个接口时,如果接口中的抽象方法有重名且参数一样的,只需要重 写一次

当一个类实现多个接口时,如果多个接口中默认方法有重名的,且参数一样的,必须 重写一次默认方法

(五)接口和抽象类的区别

相同点:

(1)都位于继承体系的顶端,用于被其他类实现或者继承

(2)都不能new

(3)都包含抽象方法,其子类或者实现类都必须重写这些抽象方法

不同点:

(1)抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等

(2)接口:成员单一,一般抽取接口,抽取的都是方法,视为功能的大集合

(3)类不能多继承,但是接口可以

二.多态

1.面向对象三大特征:封装 继承 多态

2.怎么学:

(1)不要从字面上理解多态两个字,要从使用形式上掌握

(2)要知道多态的好处

(3)要知道多态的前提

(一)多态的介绍

1.前提

(1)必须有子父类继承或者接口实现关系

(2)必须有方法的重写(没有重写,多态没有意义),多态主要玩的是重写方法

(3)new对象:父类引用指向子类对象

Fu fu = new Zi() ->理解为大类型接收了一个小类型的数据 -> double b = 10

2.注意

多态下不能直接调用子类特有功能

(二)多态的基本使用

(三)多态条件下成员的访问特点

1.成员变量

看等号左边是谁,先调用谁的变量

2.成员方法

看new的是谁,就先调用谁的成员方法,子类没有找父类

(四)多态的好处

1.问题描述:

如果使用原始的方式neew对象(等号左右两边一样),既能调用重写的,还能调 用继承的,还能调用自己特有的成员,但是多态方式new对象,只能调用重写的, 不能直接调用子类特有的成员,那为啥还要用多态呢?

2.多态方式和原始方式new对象的优缺点:

原始方式:

(1)优点:既能调用重写的,还能调用父类非私有的,还能调用自己特有的

(2)缺点:扩展性差

多态好处:

(1)优点:扩展性强

Fu fu = new Zi()

double b = 10;

b = 100L;

(2)缺点:不能直接调用子类特有功能

形参传递父类类型,调用此方法父类类型可以接收任意它的子类对象

传递哪个子类对象,就指向哪个子类对象,就调用哪个子类对象重写的方法

(五)多态中的转型

1.向上转型

(1)父类引用指向子类对象

好比是:double b = 1;

2.向下转型

(1)好比是强转,将大类型强转成小类型

(2)表现方式:

父类类型 对象名1 = new 子类对象() -> 向上转型 -> double b = 1

子类类型 对象名2 = (子类类型)对象名1 -> 向下转型 -> int i = (int)b

3.想要调用子类特有功能,需要向下转型

(六)转型可能会出现的问题

1.如果等号两边类型不一致,会出现类型转换异常(ClassCastException)

2.解决:

在向下转型之前,先判断类型

3.怎么判断类型:instanceof

判断结果是boolean型

4.使用:

对象名 instanceof 类型 -> 判断的是关键字前面的对象是否符合关键字后 面的类型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/792734.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.封装

MODULE 8 封装1.要回使用private关键字修饰成员,并知道被private修饰之后的作用(访问特点)是什么2.会使用set方法为属性赋值,使用get方法获取属性值3.会利用this关键字区分重名的成员变量和局部变量4.会利用空参构造创建对象,并知道空参构造作用5.会使用有构造创建对象…

9.面向对象(1)

MODULE 9 面向对象1.会定义静态成员以及会调用静态成员2.会使用可变参数(会给可变参数传参)3.会二分查找(手撕)4.会冒泡排序(手撕)5.会debug的使用一、static关键字(一)static的介绍以及基本使用1.概述:static是一个静态关键字2.使用:(1)修饰一个成员变量:stat…

深入了解Vite:依赖预构建原理

前言 前面我们有提到Vite在开发阶段,提倡的是一个no-bundle的理念,不必与webpack那样需要先将整个项目进行打包构建。但是no-bundle的理念只适合源代码部分(我们自己写的代码),vite会将项目中的所有模块分为依赖与源码两部分。 依赖: 指的是一些不会变动的一些模块,如:…

1000多天我开发了一个免费的跨浏览器的书签同步、阅读排版、任意网页标注插件

自我介绍 大家好,我是阿浩,一位后端开发工程师,同时也略懂前端技术。业余时间,我开发了这款小工具——《藏趣云》。 我为什么要写这么个工具 需求来源于我自己,因为我是做开发的。我日常都会使用多款浏览器来测试项目,一次需要登录多个账号,寻找各种测试地址链接。之前因…

02-逻辑概述负判断

https://blog.csdn.net/vviccc/article/details/106694210 来源

信息学奥赛初赛天天练-83-NOIP2014普及组-基础题2-输入设备、输出设备、操作系统、二进制、整数除法、while、do while循环

1 NOIP 2014 普及组 基础题2 4 以下哪一种设备属于输出设备( ) A 扫描仪 B 键盘 C 鼠标 D 打印机 5 下列对操作系统功能的描述最为完整的是( ) A 负责外设与主机之间的信息交换 B 负责诊断机器的故障 C 控制和管理计算机系统的各种硬件和软件资源的使用 D 将没有…

webstorm使用缩写生成自定义注释

/** =========================$END$========================= **/$END$代表生成的时候光标在哪里 date怎么写? date("Y-MM-d HH:mm:ss")

005.MinIO-DirectPV分布式多租户存储部署

MinIO部署准备 部署概述 本实验结合Kubernetes进行MinIO部署,实现MinIO于Kubernetes的融合。 minio官方支持通过简单的快速部署,以便于进行基础测试: curl https://raw.githubusercontent.com/minio/docs/master/source/extra/examples/minio-dev.yaml -O kubectl apply -f …

软件工程实践第一次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 适应在接下来的学习任务中使用博客园进行作业的提交学号 1022011371.个人logo文生图任务设计理念:一望无际的大…