一、接口

1.   –与抽象类一样都是定义多个类的共同属性
–使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现
–允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体

–也可以包含基本数据类型的数据成员,但它们都默认为static和final

(1)接口的作用
–是面向对象的一个重要机制
–实现多继承,同时免除C++中的多继承那样的复杂性
–建立类和类之间的“协议”
把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节
实现不同类之间的常量共享

接口允许我们在看起来不相干的对象之间定义共同行为

(2)接口的语法
–声明格式为
    [接口修饰符] interface 接口名称[extends 父接
    口名]{
    …//方法的原型声明或静态常量
    }
–接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字

–接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字

2.接口的实现
–接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象
–利用接口设计类的过程,称为接口的实现,使用implements关键字
–语法如下
public class 类名称implements 接口名称{ 
/* Bodies for the interface methods */ 
/* Own data and methods. */ 
}
必须实现接口中的所有方法
来自接口的方法必须声明成public

对象转型:对象可以被转型为其所属类实现的接口类型

3.多重继承
–Java的设计以简单实用为导向,不允许一个类有多个父类
–但允许一个类可以实现多个接口,通过这种机制可实现多重继承
–一个类实现多个接口的语法如下
    [类修饰符] class 类名称implements 接口1,接口2, …
    {    
    … …

}

4.接口的扩展
– 接口可通过扩展的技术派生出新的接口
原来的接口称为基本接口(base interface)或父接口(super interface)
派生出的接口称为派生接口(derived interface)或子接口(sub interface)
– 派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要
– 实现接口的类也必须实现此接口的父接口
– 接口扩展的语法
interface 子接口的名称 extends 父接口的名称1,父接口的名称2,…
{
… …
}

二、塑型

1.塑型(type-casting)

–又称为类型转换

-塑型的对象包括
    基本数据类型
将值从一种形式转换成另一种形式
    引用变量
将对象暂时当成更一般的对象来对待,并不改变其类型
只能被塑型为
–任何一个父类类型
–对象所属的类实现的一个接口
–被塑型为父类或接口后,再被塑型回其本身所在的类

2.方式
(1)隐式(自动)的类型转换
a.基本数据类型
相容类型之间存储容量低的自动向存储容量高的类型转换
b.引用变量
被塑型成更一般的类
被塑型为对象所属类实现的接口类型
(2)显式(强制)的类型转换
a.基本数据类型
(int)871.34354; // 结果为871 
(char)65; // 结果为‘A’ 
(long)453; // 结果为453L
b.引用变量:还原为本来的类型
当一个类对象被塑型为其父类后,它提供的方法会减少
3.塑型应用的场合包括
–赋值转换
赋值号右边的表达式类型或对象转换为左边的类型
–方法调用转换
实参的类型转换为形参的类型
–算数表达式转换
算数混合运算时,不同类型的项转换为相同的类型再进行运算
–字符串转换
字符串连接运算时,如果一个操作数为字符串,一个操作数为数值型,则会自动将数值型转换为字符串

三、多态

1.
概念
–是指不同类型的对象可以响应相同的消息
–从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的

多态的目的

–所有的对象都可被塑型为相同的类型,响应相同的消息
–使代码变得简单且容易理解
–使程序具有很好的“扩展性”
2.绑定
–指将一个方法调用同一个方法主体连接到一起
–根据绑定时期的不同,可分为
早期绑定
–程序运行之前执行绑定
晚期绑定
–也叫作“动态绑定”或“运行期绑定

–基于对象的类别,在程序运行时执行绑定

3.多态的应用
–技术基础
向上塑型技术:一个父类的引用变量可以指向不同的子类对象

动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性

4.构造方法与多态
–构造方法与其他方法是有区别的
–构造方法并不具有多态性,但仍然非常有必要理解构造方法如何在复杂的分级结构中随同多态性一同使用的情况
构造方法的调用顺序
–调用基类的构造方法。这个步骤会不断重复下去,首先得到构建的是分级结构的根部,然后是下一个派生类,等等。直到抵达最深一层的派生类
–按声明顺序调用成员初始化模块

–调用派生构造方法

当我们在构造派生类的时候,必须能假定基类的所有成员都是有效的。在构造方法内部,必须保证使用的所有成员都已初始化。因此唯一的办法就是首先调用基类构造方法,然后在进入派生类构造方法之前,初始化所有能够访问的成员构造方法中的多态方法
–在构造方法内调用准备构造的那个对象的动态绑定方法
会调用位于派生类里的一个方法
被调用方法要操纵的成员可能尚未得到正确的初始化
可能造成一些难于发现的程序错误
定义构造方法的注意事项
–用尽可能少的动作把对象的状态设置好
–如果可以避免,不要调用任何方法

–在构造方法内唯一能够安全调用的是在基类中具有final属性的那些方法(也适用于private方法,它们自动具有final属性)。这些方法不能被覆盖,所以不会出现上述潜在的问题

四、内部类

1.内部类
–在另一个类或方法的定义中定义的类
–可访问其外部类中的所有数据成员和方法成员
–可对逻辑上相互联系的类进行分组
–对于同一个包中的其他类来说,能够隐藏
–可非常方便地编写事件驱动程序
–声明方式
命名的内部类:可在类的内部多次使用
匿名内部类:可在new关键字后声明内部类,并立即创建一个对象
–假设外层类名为Myclass,则该类的内部类名为
Myclass$c1.class (c1为命名的内部类名)

Myclass$1.class (表示类中声明的第一个匿名内部类)

2.内部类实现接口
–可以完全不被看到,而且不能被调用

–可以方便实现“隐藏实现细则”。你所能得到的仅仅是指向基类(base class)或者接口的一个引用

3.方法中的内部类
在方法内定义一个内部类
–为实现某个接口,产生并返回一个引用
–为解决一个复杂问题,需要建立一个类,
而又不想它为外界所用

JAVA学习笔记(6)——接口与多态相关推荐

  1. java学习笔记day09 final、多态、抽象类、接口

    java学习笔记day09 思维导图 final . 多态 . 抽象类 . 接口 (都很重要) 一.final 二.多态 多态中的成员访问特点⭐ [P237] 多态的好处 [P239] 多态的弊端 向 ...

  2. Java学习笔记09从认识多态开始

    Day09学习记录 目录 1.多态 2.抽象类 3.接口 1.1多态的概念 某一个事物,在不同时刻表现出来的不同状态. 在使用多态时要注意: a.要有继承关系 b.要有方法重写 c.要有父类引用指向子 ...

  3. Java学习笔记——函数式接口

    一.函数式接口概述 函数式接口:有且仅有一个抽象方法的接口. Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于 Lambda表达式使用的接口.只有确保接口中有且仅有一个抽 ...

  4. Java学习笔记004——接口、克隆、回调、内部类

    接口 1.接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义 2.定义接口,如: public interface Abc{ int aaa(Object other) } 3 ...

  5. Java学习笔记(四)——接口

    Java学习笔记(四)--接口 1.格式 2.接口的特点 3.接口举例 1.格式 接口:初期理解,可以认为是一个特殊的抽象类.当抽象类中的方法都是抽象的,那么该类 可以通过接口的方式来表示. clas ...

  6. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  7. 尚学堂Java学习笔记

    尚学堂Java学习笔记 ============================ J2SDK&JRE J2SDK:JAVA2 SOFTWARE DEVELOPMENT KIT JRE:JAVA ...

  8. 郑志远的java学习笔记

    郑志远的java学习笔记 郑志远    CCB 1         Java起源 略 2         Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  10. 2022年Java学习笔记目录

    一.2022年Java任务驱动课程 任务驱动,统摄知识点:2022年Java程序设计讲课笔记 二.2022年Java学习笔记 (一)踏上Java开发之旅 Java学习笔记1.1.1 搭建Java开发环 ...

最新文章

  1. ansys的kbc_ansys求解过程
  2. java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
  3. 175. Combine Two Tables
  4. Linux内核奔溃分析
  5. 双11享Go了吗?2017阿里双11在线峰会续写科技盛宴!
  6. 再谈几种语言的运行速度比较:看第三方比较结论!
  7. macOS安装配置rzsz(附博主安装过程中的错误解决)
  8. 力士乐驱动器原理图_力士乐驱动器参考手册大全
  9. 从事IC设计工作强度大不大?是吃青春饭吗?
  10. Python机器学习之Logistic回归
  11. 华文行楷字帖欣赏_任政书法:行楷字帖《二十四孝组诗》集字版,美不胜收!...
  12. Java期末作业-各种系统设计
  13. 迁移erp服务器系统教程,erp迁移上云服务器
  14. 一段困扰许久的防注入代码
  15. 电影《在云端》经典对白翻译
  16. 大一生活怎么过,一个爱学习的孩子是这么想的
  17. JavaWeb(尚硅谷补充实操版)-中
  18. html日期选择器小日历样式,超漂亮的网页 日期 时间选择器
  19. VS下编译 缺少unistd.h的解决方法
  20. JavaScript:回调函数(callback)

热门文章

  1. yarn logs 查看日志
  2. eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下
  3. 404 网站服务器错误怎么解决,网站404错误页面是什么意思,它有什么用?
  4. 给自己的学习任务1:做一个工资计算器app
  5. MIT周博磊:CV本质上是一门科学研究
  6. 总结图扑软件可实现的可视化效果案例分享
  7. R语言实战之基本统计分析
  8. TensorFlow对象检测-1.0和2.0:训练,导出,优化(TensorRT),推断(Jetson Nano)
  9. Eclipse中格式化JS、HTML代码
  10. 南京邮电大学壁纸计算机院,立夏 | 一大波夏日壁纸放送