面向对象的四大支柱:
抽象 - 定义一个类的过程就是一个抽象的过程(数据抽象、行为抽象)
通过抽象我们可以将数据和操作数据的方法以"对象"的概念绑定到一起
抽象的过程是一个仁者见仁智者见智的过程,对同一个对象做抽象可能会产生不同的结果封装 - 隐藏一切可以隐藏的实现细节,只向外界提供最简单的编程接口
继承 - 从一个已有的类创建新类的过程,提供继承信息的叫父类(超类、基类)
得到继承信息的叫子类(派生类、衍生类),继承是实现代码复用的一种手段.多态 - 同样的引用类型调用相同的方法但是做了不同的事情
实现多态有两个关键步骤: 1.方法重写 ; 2.对象造型同样的类型调用相同的方法(发同样的消息)
但是用了不同的事情 - 这就是多态(polymorphism)如何实现多态:
1.方法重写 - 子类在继承父类的过程中对父类的方法给出自己的实现版本
2.对象造型 - 用父类型的变量保存子类对象如果一个方法暂时无法给出实现 那么可以将其声明为抽象方法
抽象方法需要用abstract关键字修饰且没有方法体
如果一个类中有抽象方法(说明这个类不完整)那么必须被声明为抽象类
抽象类不能实例化(不能创建抽象类的对象)
抽象类是专门留给其他类去继承的类
重载 - 同一个类中有同名的方法 只要参数列表不相同就可以共存 - overload
重写 - 子类继承父类的过程中对父类已有方法给出新的实现版本 - override
我们能够操控的内存:
栈 - 快、小 - 临时变量/局部变量
堆 - 稍慢、大 - 对象
方法区 - 代码、常量
temp在栈上 它保存了堆上的Cat对象的地址
通过temp就可以找到堆上的对应的Cat对象并给对象发消息
所以我们通常把对象类型的变量称为对象的引用
Java中的类型就分为两大类:基本数据类型(8种)和枚举类型
引用类型
Java中有4种访问修饰符:
private<default<protected<publicinstanceof运算符可以判断对象是不是某种类型
该运算符在程序运行时判定对象的类型 - RTTI
接口
接口是方法声明的集合
-
接口的三个关键点
- 接口代表能力
- 接口代表约定
- 接口代表角色
抽象类和接口本身不能实例化 但是可以使用就地实例化的方式来创建对象
所谓就地实例化实际上是创建了匿名内部类(anonymous inner type)的对象接口之间可以继承的而且允许多重继承(一个接口继承多个接口)
Java8+ ---> Lambda表达式 ---> 匿名函数
- 仅限接口中只有一个方法且没有默认方法的时候
okButton.addActionListener(e ->{
changeBgColor();
});
类和类之间简单的说有三种关系:
- is-a - 继承 - 学生和人
- has-a关系 - 关联(聚合/合成) - 扑克和一张牌
- use-a关系 - 依赖 - 人和房子
类和它实现的接口之间的关系:
- play-a / like-a - 实现关系