**********************************************************************
**********************************************************************
由于数组的类型是父类Employer,只能访问父类的属性及方法
那么如何访问子类独有的属性及方法?
知道:当前元素他在赋值时的具体类型
Employer[] aryEmp=new Employer[20];
//向上类型转换,自动类型转换
//向上类型转换,子类对象赋值给父类类型的变量
aryEmp[0]=new PG();
aryEmp[0].
//使用instanceof 运算符
语法 对象 instanceof 类名
计算结果:true false
if(aryEmp[0] instanceof PG){
//向下类型转换,需要强制类型转换
//父类类型的对象赋值给子类类型的变量
PG pg=(PG)aryEmp[0];
}
运用技能点:
1、封装 继承 多态
封装:属性值的安全 合理
继承:代码复用
多态:同一父类类型,对同一方法,表现出不同行为
当程序扩展时,代码改动最小
扩展:多态的实现方式(有两种)
1、方法重写 override 也称为方法覆盖
动态方式实现多态:在调用过程中,子类的方法才去覆盖掉父类中的抽象方法
在编译及new的过程中并没有覆盖
2、方法重载 overload
静态方式实现多态:在程序编译的过程中,重载的方法就都确定加载到内存中
方法重载和方法重写的区别?
1、位置不同
重载的方法是在同一个类中
重写的方法在子类中,被重写的方法在父类中
2、重载:同名不同参 与返回值类型无关
重写:要求方法头相同
接口:
类:使用is-a来描述子类、父类的关系 类单继承
人类 父
学生类 子 学生 is a 人
子 父
员工类 PG类 PG is a Employer
PG 会打篮球 技能
has - a 技能(接口) interface
接口:
1、方法:必须是抽象方法,必须是public
2、属性:必须是public 必须是final的
常量:值不能改变的量,声明赋值后,不能再通过代码改变其值。
常量使用final来修饰
final :最终的
变量:值可以改变
int i=1;
i=2;
一、使用final修饰的变量就是常量,其值在赋值后不能被改变
【说明】
1、属性级常量,在声明的同时需要赋值
2、局部级常量,在声明后,可以单独赋值,但是赋值后,不能再次改变值
3、常量在命名时所有字母都大写
二、使用final修饰方法,称为最终方法,不能被子类重写
三、final修饰类,称为最终类,不能被继承,没有子类
String 就是使用final修饰的
接口的使用场景
1)接口让类去实现(继承)
语法:类名 implements 接口名,接口名
【说明】类实现接口后,就要实现(方法重写)接口中的所有方法
implements 实现
2)类在继承父类的同时,还可以实现多个接口
包:com.qianfeng.oopstudy.interfaces
语法 类名 extends 父类名 implements 接口名1,接口名2
3)接口和接口之间可以继承 extends
语法 接口 extends 接口1,接口2
Java继承的特点:类单继承 接口多继承
总结:
什么时候编写类,什么时候编写接口
符合 is - a 的关系时 编写类
符合 has- a 的关系时 编写接口
面试题: 抽象类和接口有什么区别?
1、抽象类里可以有非抽象方法,接口中的方法必须是抽象的
2、类是单继承的,接口是多继承的
3、属性,抽象类中可以有常量也可以有普通属性 接口中的属性必须是public final
相同点:
抽象类和接口都不能被实例化
抽象类有构造方法,接口没有构造方法
抽象类中的构造方法用于给属性赋值
练习:
车类
属性:品牌 颜色
方法:启动 行驶
子类:轿车类
属性:排量
方法:制冷
滴滴接口:顺风车拉客运营功能
创建两个轿车对象,调用方法
增加卡车类
Truck
属性:载重量
方法:拉货方法
简单工厂设计模式
方法:职能是创建对象
设计模式:在软件开发中解决某种问题的编码方式
简单工厂设计模式:创建对象时,对象的类频发发生变化
一共23种:
作业1:
商品管理系统
商品类:父
编号 名称 单价
子类:
食品:保质期
服装类:尺码
技术:封装 继承 多态
1、简单工厂设计模式
菜单:商品的增删改查
作业2:掷骰子游戏:
描述:玩家 5000个金币
电脑掷3个骰子 : 3--18
玩家:压钱:50或50的倍数
猜大小: 电脑 9个以下 小
9个以上 大
每次猜测结束后,输出结果
首先:
1、向上 向下类型转换
2、instanceof
3、接口的使用