1.软件设计六大原则
1单一职责原则 : 功能职责单一,只拥抱一种变化
2里氏替换原则 : 所有在使用父类的情况下,都可以使用子类
3依赖倒置原则 : 高层通过抽象依赖底层,
4接口隔离原则 : 不应该依赖于它不需要的接口
5迪米特原则 : 最少知识原则
6开闭原则 : 对扩展开放,对修改关闭
2.多态 polymorphism
- 多态:父类引用指向子类对象;
- 多态的好处为:可以调用子类的覆写,和父类本身的属性, 但是不能调用子类特有的属性
多态中:父类没有,直接报错
父类有,子类没有,直接用父类
父类有,子类有,用子类覆写的
3.多态为什么不能调用子类特有方法?
- 编译阶段:查找父类属性都有啥,确定这个类中都有啥方法(静态绑定属性列表)
- 运行阶段:各个类在方法区载入, 创建对象,当父类调用子类的覆写方法时,因为父类的"目录"中有同名的属性,所以会调用子类的覆写方法,但是子类的特有属性不会出现在父类的查找"目录"上, 所以运行时的父类对象找不到.(动态绑定属性列表)
4.隐式多态(不容易看出,框架原码经常用)
首先:this 用来存储当前对象的内存地址
上代码:
- 那么 这里的this 就等于是 SupClass this
- 那么 this的引用 是子类对象,再结合this 是当前类类型 所以成了这样 SupClass this = new SubClass();
5.instanceof
判断一个对象是否是某个类的子类,是的话返回true,否则false
if (a instanceof Cat) { //若a属于cat类则将参数a强转为子类对象c,再调用c的move方法
Cat c = (Cat) a;
c.move();
}else{ //若a不属于cat类则属于dog类将参数a强转为子类对象d,再调用d的move方法
Dog d = (Dog)a;
d.move();
}
6.抽象类
抽象类(相当于一个属性目录),指定以功能,不实现功能(只有构造方法,但不能创建对象)
- 可以有自己的非抽象方法(可选择性覆写),自己的抽象方法(必须覆写)
- 不能同时和final出现
- 接口类需要全部抽象
7.接口
语法:
class Test1 implements Interface_01 {
}
接口默认全为抽象方法,只有常量(public static final可以省略),(方法省略public, void, abstract)
- 新特性:
- 1.8新特性-静态方法
- 1.8新特性-default修饰的方法,只可以用实现类调用)
//接口类中以下三种变量声明一模一样
int i = 2;
public static final int x = 1;
public int d = 3;
//接口类中以下三种方法声明一模一样
void m1();
public void m2();
public abstract void m3();