一、多态
##1.多态的概述
- 什么是多态?
一个对象 ,在不同的时刻有不同形态
父类引用 指向了 子类的对象
##2.多态的前提
- 多态的前提?
* 必须有继承 或 接口实现的关系
* 方法的重写
多态三种格式:
* 普通类的多态
格式:父类 对象名 = new 子类对象();
* 抽象类的多态
格式: 抽象类 对象名 = new 抽象类子类对象();
* 接口的多态
##3. 多态中成员变量的使用特点
- 多态中成员变量的使用特点?
- 多态中成员方法的使用特点?
总结:
* 成员变量的使用特点
口诀:编译看左边 运行看左边
* 成员方法的使用特点
口诀:编译看左边 运行看右边
##4. 使用多态的好处
- 无论右边new的是那个子类对象, 左边都不会发生变化
总结:
* 使用多态有什么好处?
提高了代码的扩展性
* 使用多态有什么弊端?
访问不了子类特有的成员
##5. 多态的转型
- 多态转型的分类?
总结:
* 多态的向上转型
将小的数据类型 提升 大的数据类型
子类 父类
Animal an = new Cat();
double d = 10;
* 多态的向下转型
将大的数据类型 转换为 小的数据类型
* 什么情况下需要用到向下转型?
使用子类特有的成员,需要向下转型
* 向下转型的格式
格式: 目标数据类型 变量名 = (目标数据类型)父类引用变量名;
Cat cat = (Cat) an;
注意事项:向下转型 不要轻意的向下转型
二、抽象类
##6. 抽象的概念
- 什么是抽象类?
- 什么是抽象方法?
总结:
1. 什么是抽象类?
抽象方法的所在的类,必定是一个抽象类
2. 什么是抽象方法?
在一个类中没有方法体的方法,就是抽象方法
##7.抽象方法和抽象类的格式
- 抽象方法定义格式
- 抽象类定义格式
总结:
1.抽象方法定义格式
public abstract 返回值类型 抽象方法名();
2.抽象类定义格式
public abstract class 抽象类名{}
##8.抽象类的特点
总结:
* 抽象类和抽象方法必须使用 abstract 关键字修饰
* 抽象类中不一定有抽象方法(非抽象方法,提高代码的复用性),有抽象方法的类一定是抽象类
* 抽象类不能实例化
抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态
* 抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类
##9.抽象类的成员特点
总结:
* 成员变量
变量 也可以 有常量
* 构造方法
可以有 给子类的访问使用,给父类数据进行初始化
* 成员方法
非抽象方法
抽象方法
抽象类的思想:
强制子类重写父类中的抽象方法
##三、接口
##10. 接口概述
- 什么是接口
总结:
接口就是一种公共规范的标准
接口一定要暴露出来 --> 简单理解 是一份契约 [合同]
##11. 接口的定义基本格式
- 接口的基本定义格式
格式:
public interface 接口名{}
注意事项:
接口与类之间的关系不在是继承而是实现的关系
##12. 接口的成员特点
总结:
* 成员变量
只有静态常量
默认有 public static final 来修饰的
这三个修饰符,还可以组合进行书写
* 构造方法
没有构造方法
* 成员方法
只有抽象方法
JDK7接口中可以有:
常量
抽象方法
JDK8接口中可以有:
默认方法
静态方法
JDK9接口中可以有:
私有方法
* 普通的私有方法
* 静态的私有方法
单继承多实现
##13. 类和接口的关系
类与类的关系 : 单继承
类与抽象类的关系 : 单继承
抽象类与抽象类的关系 : 单继承
类与接口的关系 : 实现而且可以多实现
抽象类与接口的关系: 实现
接口与接口的关系 : 多继承
##14. 抽象类和接口的区别
总结:
* 成员区别
* 抽象类
* 接口
* 关系区别
* 类与类
* 类与接口
* 接口与接口
* 设计理念区别
* 抽象类(抽取多个类中的相同的成员)
对类抽象,包括属性、行为
抽象类通常是对同类事物相对具体的抽象,通常包含抽象方法,实体方法,属性.
抽象类是一种模版式设计, 我们只需要将同类事物的一些相似的特征抽取出来,从而就形成了一个
模版类
* 接口(一个事物有额外的一个功能)
对行为抽象,主要是行为
public abstract class Student{
String name;
int age;
abstract eat();
abstract sleep();
// abstract studyJava();
}
// 将学习java的方法,定义到一个接口中
public interface Study{
public abstract studyJava();
}
class CangStudent extends Student implements Study {
eat()
sleep()
public studyJava()
}
class LuStudent extends Student{
eat()
sleep()
}