接口&多态

day04
接口
概念:
1.接口就是一种公共的规范标准.
2.用来做功能的拓展(类继承机会只有一次,除了继承还想得到资源可以通过实现接口)
定义格式:
public interface 接口名 {}
成员组成部分:
1.静态常量(默认自带修饰符 public static final)
2.抽象方法(默认自带修饰符 public abstract ) 实现接口必须实现所有的抽象方法.
jdk8的新特性
在接口中添加了默认方法和静态方法.
1.默认方法: public default void show(){} : 解决了接口升级的问题.子类可以不重写默认方法.就可以使用.
2.静态方法:public static void show(){} : 可以使用接口名直接调用静态方法.(调用方便)
jdk9的新特性
在接口中添加了私有方法: private void method(){} :
解决了接口内部代码优化的问题.共性代码可以写在私有方法内.
类和接口的关系
- 类与类的关系
继承关系,只能单继承,但是可以多层继承

- 类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

- 接口与接口的关系

​ 继承关系,可以单继承,也可以多继承
多态
概念:
同一个事物在不同情况下会展示出不同的状态.
具体体现: 父类引用执向子类对象.
格式:
父类类型 变量名 = new 子类类型();
访问成员特点
成员变量: 编译看左边,运行看左边
成员方法:编译看左边,运行看右边.
多态的优缺点:
优点:扩展性提高了.
缺点: 不能使用子类特有的方法.
多态的转型问题:
向上转型(多态)
父类类型 变量名 = new 子类类型();
向下转型(强制类型转换)
子类型 对象名 = (子类型)父类引用;
避免类型转换异常:
//使用instanceof关键字去判断一个对象是否属于某个类型
if(a instanceof Dog){
Dog dog = (Dog) a;
dog.watchHome();
}
内部类
成员内部类
位置:类中方法外
创建对象: Outer.Inner oi = new Outer().new Inner();
静态成员内部类创建对象: 外部类名.内部类名 对象名 = new 外部类名.内部类名();
局部内部类
位置:方法内部
创建对象:只能在方法内直接创建对象.
匿名内部类[掌握]
位置:方法内部
创建对象
new 类名 ( ) { 重写方法 } / new 接口名 ( ) { 重写方法 }
new Inter(){
@Override
public void method(){}
}
lambda
思想:
函数式编程思想概述

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿数据做操作”

面向对象思想强调“必须通过对象的形式来做事情”

函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”

而我们要学习的Lambda表达式就是函数式思想的体现
格式
(形式参数) -> {代码块}

- 形式参数:如果有多个参数,参数之间用逗号隔开;如果没有参数,留空即可
- ->:由英文中画线和大于符号组成,固定写法。代表指向动作
- 代码块:是我们具体要做的事情,也就是以前我们写的方法体内容
使用前提:
- 有一个接口
- 接口中有且仅有一个抽象方法
格式省略模式:
省略的规则

- 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
- 如果参数有且仅有一个,那么小括号可以省略
- 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
使用场景
对匿名内部类进行优化.

原文地址:https://www.cnblogs.com/xiaofeiji/p/13448624.html