ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-01-16 12:33:37  阅读:161  来源: 互联网

标签:调用 子类 JavaEE 多态 覆写 抽象类 父类 public


1.软件设计六大原则

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

2.多态 polymorphism

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

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

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

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

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();

8.各类的比较

在这里插入图片描述

标签:调用,子类,JavaEE,多态,覆写,抽象类,父类,public
来源: https://blog.csdn.net/qq_44788228/article/details/112692284

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有