接口

1.接口
1.1 什么是接口
interface
接口是一种行为规范
从语法上讲:接口是一种特殊的抽象类(初期理解)
这种特殊的抽象类中
所有的方法都是抽象的
所有的变量都是常量
从功能上讲:接口表示一种约定或者能力

1.2 接口的特点(重点)
1.类与类之间的关系 叫做 继承 extends
类是单继承 一个儿子只能有一个爹
类与接口之间的关系 叫做 实现 implements
一个类 可以同时实现多个接口 接口与接口之间用逗号分隔 一个儿子可以有多个干爹
2.类在继承一个类的同时 还可以实现多个接口
弥补了java类之间单继承的不足 提高了代码的扩展性
3.在java中 接口与接口之间也有关系 接口继承接口 一个接口可以同时继承多个接口
4.接口不能用于实例化对象 接口中没有构造方法

抽象类 和 接口的区别(重点)
1.抽象类 使用abstract修饰 接口使用interface声明
2.抽象类中可以包含非抽象的方法 也可以包含抽象方法
接口中所有的方法都是抽象的
3.抽象类 和 接口都不能被实例化
抽象类中构造方法
接口中没有构造方法

2.多态
2.1 什么是多态
定义: 事物存在的多种体现形态

2.2 多态的前提****(重点)
1.类与类/接口之间存在着关系 要不就是继承 要不就是实现
2.子类重写父类方法
3.父类引用指向子类对象
Animal a = new Dog();
2.3 对象的向上转型 和 向下转型
向上转型
Animal a = new Dog();
子类对象 赋值给 父类引用 会自动将子类对象的类型提升为父类类型
语法:
父类类型 引用名 = new 子类类型();
特点:
此时该引用 只能调用父类中的属性和方法
不能调用子类特有的属性和方法
向下转型
将父类引用 强制 转为子类类型的过程
语法:
子类类型 引用名 = (子类类型)父类引用;
特点:
1.此时该引用可以调用子类特有的方法 同时还可以调用从父类继承过来的方法
2.在进行向下转型之前 一定要用 instanceof运算符 进行判定
否则容易出现"ClassCastException"类型强制转换异常
语法:
对象 instanceof 类型
结果是 boolean类型
true 对象属于指定类型
false 对象不属于指定类型

2.4 多态的应用以及注意事项(重点)
在多态中
父类引用指向子类对象时
成员方法调用的特点:
编译看左边 运行看右边
在编译时期 参阅引用变量所属的类型中是否有调用的方法
如果有 编译通过
如果没有 编译不通过
在运行时期 参阅对象所属的类中是否有调用的方法
如果有 就调用
如果没有 就调用父类的
在堆内存中 在创建子类对象的同时 包含父类的内容 "你的是我的 我的还是我的"

成员方法 动态绑定(根据对象的实际类型确定执行哪个方法)
成员变量的特点:
编译看左边 运行看左边
成员变量 不具备多态性 通过引用变量来访问其包含的实例变量
当父类 子类 出现重名变量的时候 多态状态下 看的是父类
因为在创建子类对象时 堆内存中其实有两个变量
一个是父类的num 一个是子类的num
当你拿父类的引用 去找num的时候 他就找到他自己的

成员变量(属性) 静态绑定(只根据当前表示类型决定使用哪个变量)
不存在重写 父类中已经有属性了 就不再去找子类中的
静态成员方法:
编译看左边 运行看左边
静态绑定(与类相关 与对象无关)
2.5 多态的好处和弊端
多态的好处:
提高了程序的扩展性
作用主要体现在 方法的形参列表上
被继承的类 /被实现的接口 当做形参传递 可以接收任意子类(实现类)对象
多态的弊端:
虽然提高了程序的扩展性
但是只能使用父类的引用访问父类中定义的成员
不能直接访问子类特有的属性和方法 想要访问 必须向下转型

原文地址:https://www.cnblogs.com/wanghuaying/p/9390966.html