java基础总结十(接口、多态)

                                                    接口

一. 接口概念

接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的类。
接口只描述应该具备的方法,并没有具体实现,具体的实现类由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
请记住:一切事物均有功能,即一切事物均有接口。

二.接口的代码体现

在代码体现中,接口的更为抽象表现为其内的所有方法均为抽象方法,同时不定义普通的成员变量(可以定义静态常量,在后边介绍)。  

如同抽象类,接口在使用时同样不能创建对象。

类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。

其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。

三.接口定义

a) 定义关键字

与定义类的class不同,接口定义时需要使用interface关键字。

定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。

b) 定义格式

使用interface代替了原来的class,其他步骤与定义类相同:

方法均为公共访问的抽象方法

无法定义普通的成员变量

public interface 接口名 {

抽象方法1;

抽象方法2;

抽象方法3;

}

如:

public interface Careable {

public abstract void carCare();

}

四. 接口使用

a) 类实现接口

我们使用实现来表示一个类与一个接口之间的关系,这是最常用的使用方法。

实现的关键字为implements

 

格式:

Classimplements接口 {

重写接口中方法

}

 

在实现后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑

则:

接口中定义功能,一切类需要具有该功能时均可以实现该接口,只声明了应该具备该方法,是功能的生命。

具体实现类中重写方法,实现功能,是方法的具体实现。

 

于是,通过以上两个动作将功能的声明与实现便分开了。(此时请重新思考:类是现实事物的描述,接口是功能的集合。)

 

a) 接口继承接口

如同类继承类后便拥有了父类的成员,可以使用父类的非私有成员。A接口继承B接口后,A接口便拥有了AB两个接口中所有的抽象方法。

b) 定义接口变量使用多态

接口经常参与多态。在后边多态时,我们详细讲解。

这里我们需要清楚,接口也是一种特殊的数据类型,就可以定义变量、作为参数声明、作为返回值声明、作为成员变量声明。

五.接口注意事项

Java支持一个类同时实现多个接口。

Java支持一个接口同时继承多个接口。

类可以在继承一个类的同时,实现多个接口。

接口与父类的功能可以重复,均代表要具备某种功能,并不冲突。

 

接口中的成员是有固定修饰符的,如果没有写,也会自动加入:

“变量”修饰符为:public static final

方法修饰符为:public abstract(所以依据方法重写的访问权限注意事项,重写接口方法时,必须使用public)

当一个类实现了接口时,必须实现其所有的方法,否则这个类会保留一些抽象方法,此时,该类包含了抽象方法,便必须定义为一个抽象类。


六.接口与抽象类的辨析

1. 概念辨析

 当"我是你的一种时",子类继承父类,即代表了类与类之间的关系,该体系的类都应该具备父类的成员。

"我应该像你一样具备这些功能时",类实现接口,即代表类与功能的关系,将功能的声明与实现分离。并不是该体系内所有类都需要的额外功能。

2 .使用辨析

类继承类extends,只能单继承

接口继承接口extends可以多继承

类实现接口implements可以多实现

接口不可以继承类!

 

抽象类中可以有非抽象方法

接口中全部为抽象方法

 

抽象类具有成员变量

接口没有普通的成员变量

 

抽象类中的成员无固定修饰符

接口中的成员有固定修饰符


                                             多态


一.多态概述

多态是继封装、继承之后面向对象的第三大特性。

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person

二. 多态概念

Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student类型的引用,也可以赋值给一个Person类型的引用。

最终多态体现为父类引用变量可以指向子类对象。

多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

 

多态优点:

配合继承与方法重写提高了代码的复用性与扩展性,如果没有方法重写,则多态同样没有意义。

三. 多态的定义与使用格式

父类引用指向子类对象就是多态的定义格式。同一个父类的方法会被不同的子类重写为各自的具体实现。在调用方法时,调用的为各个子类重写后的方法。

父类类型  变量名 = new 子类类型();

变量名.方法名();

 

当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。

四. instanceof关键字

我们可以通过instanceof关键字来判断某个对象是否属于某种数据类型。如学生的对象属于学生类,学生的对象也属于人类。

使用格式:

boolean  b  = 对象  instanceof  数据类型  

五.向上转型与向下转型

向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的!

六. 多态细节规则

 编译时,检查父类引用变量的数据类型是否包含对应的成员方法与成员变量。

运行时,成员方法调用子类重写方法,没有用private修饰的成员变量访问时,访问的为父类类型的。

或简单记忆:只有在调用方法时,调用的时子类重写方法,其他一切表现均为父类类型。

 

七.多态的使用场景

我们一般在以下场景当中使用多态:

成员变量赋值、局部变量赋值

方法传参

返回值返回值




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
无论是工作学习,不断的总结是必不可少的。只有不断的总结,发现问题,弥补不足,才能长久的进步!!Java学习更是如此,知识点总结目录如下: 目录 一、 Java概述 3 二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 20 四、 面向对象★★★★★ 21 五、 封装(面向对象特征之一)★★★★ 23 六、 继承(面向对象特征之一)★★★★ 25 七、 接口(面向对象特征之一)★★★★ 28 八、 多态(面向对象特征之一)★★★★ 30 九、 java.lang.Object 31 、 异常★★★★ 34 一、 包(package) 37 二、 多线程★★★★ 39 为什么要使用多线程 39 创建线程和启动 39 线程的生命周期 44 线程管理 45 线程同步 49 线程通信 52 线程池 58 死锁 64 线程相关类 65 三、 同步★★★★★ 67 四、 Lock接口 70 五、 API 71 String字符串:★★★☆ 71 StringBuffer字符串缓冲区:★★★☆ 73 StringBuilder字符串缓冲区:★★★☆ 74 基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 Collection接口 77 Iterator接口 78 List接口 78 Set接口 80 Map接口 81 把map集合转成set的方法 82 使用集合的技巧 83 Collections--集合工具类 83 Arrays—数组对象工具类 84 增强for循环 85 可变参数(...) 86 枚举:关键字 enum 86 自动拆装箱 86 泛型 87 System 89 Runtime 90 Math 90 .Date:日期类,月份从0—11 92 Calendar:日历类 93 六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File类 102 Java.util.Properties 103 介绍IO包中扩展功能的流对象 103 七、 网络编程 110 网络基础之网络协议篇 111 UDP传输 124 TCP传输 126 八、 反射技术 127 九、 Ajax原理及实现步骤★★★★★ 130 Ajax概述 130 Ajax工作原理 130 Ajax实现步骤 130 详解区分请求类型: GET或POST 131 $.ajax标准写法 134 二、 正则表达式:其实是用来操作字符串的一些规则★★★☆ 135 二一、 设计模式★★★★★ 136 设计模式简介 136 单例设计模式:★★★★★ 156 工厂模式★★★★★ 159 抽象工厂模式★★★★★ 163 建造者模式 170 原型模式 177 适配器模式 182 桥接模式 188 过滤器模式 192 组合模式 193 装饰器模式★★★★★ 196 外观模式 201 享元模式 204 代理模式★★★★★ 208 责任链模式 212 命令模式 216 解释器模式 219 迭代器模式 222 中介者模式 224 备忘录模式 226 观察者模式 230 状态模式 233 空对象模式 236 策略模式★★★★★ 238 模板模式 240 访问者模式 244 设计模式总结★★★★★ 247 二二、 Java其他总结 248 Java JVM知识点总结 248 equals()方法和hashCode()方法 270 数据结构 273 Array方法类汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下常用的类 326 NIO(New IO) 327 volatile详解 337 Java 8新特 347 Java 能优化 362

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盒子_spring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值