JavaEE_day12 (多态、抽象类、接口)

1.软件设计六大原则

1单一职责原则 : 功能职责单一,只拥抱一种变化
2里氏替换原则 : 所有在使用父类的情况下,都可以使用子类
3依赖倒置原则 : 高层通过抽象依赖底层,
4接口隔离原则 : 不应该依赖于它不需要的接口
5迪米特原则 : 最少知识原则
6开闭原则 : 对扩展开放,对修改关闭

2.多态 polymorphism

  1. 多态:父类引用指向子类对象;
  2. 多态的好处为:可以调用子类的覆写,和父类本身的属性, 但是不能调用子类特有的属性

多态中:父类没有,直接报错
父类有,子类没有,直接用父类
父类有,子类有,用子类覆写的

3.多态为什么不能调用子类特有方法?

  1. 编译阶段:查找父类属性都有啥,确定这个类中都有啥方法(静态绑定属性列表)
  2. 运行阶段:各个类在方法区载入, 创建对象,当父类调用子类的覆写方法时,因为父类的"目录"中有同名的属性,所以会调用子类的覆写方法,但是子类的特有属性不会出现在父类的查找"目录"上, 所以运行时的父类对象找不到.(动态绑定属性列表)

4.隐式多态(不容易看出,框架原码经常用)

首先:this 用来存储当前对象的内存地址
上代码:
JavaEE_day12 (多态、抽象类、接口)

  • 那么 这里的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();

8.各类的比较

JavaEE_day12 (多态、抽象类、接口)

上一篇:JavaEE实验:使用ServletContextListener监听器


下一篇:IDEA JavaEE项目如何导入jar包