接口
一、内容回顾
1、类型转换:
装箱:向上类型转换、自动完成,把子类转换为父类的过程
问题:只能访问父类里的成员,不能访问子类成员
Pet[] pets=new Pet[5];
体现了LSP原则:里氏代换原则,方便编码
拆箱:向下类型转换、强制完成,把父类类型转换为子类类型的过程
遍历数组,需要强转
对象 instanceof 类型 判断该对象是否是某个类型,是:true 不是:false
强制转换后,就可以访问子类对象成员
2、abstract 抽象的
如果方法无法确定方法体,那么就不写方法体,{}也不写,这样的方法称为抽象方法
抽象方法所在的类一定是抽象类,抽象类中可以没有抽象方法。
抽象类不能被实例化,有构造方法,给属性赋值
抽象类的作用:约束子类行为的作用,子类必须实现抽象类中的抽象方法
3、static静态的
属性 方法 内部类 代码块
在一个类中,static修饰的静态成员,存在于方法区中(属性在运行后就加载到了方法区,方法是在调用时加载方法区,都只加载一次,程序关闭后static消失),实例成员,在new时被加载到堆区中
静态成员对所有对象共享
访问静态成员的方式:类名.静态成员名 推荐
静态成员名 不推荐
对象名.静态成员名 不推荐
静态方法不能直接访问实例成员,必须先new对象,然后通过对象访问
可以直接访问静态成员
实例方法可以直接访问静态成员
可以直接访问实例成员
4、final最终的
常量:赋值后,就不允许改变值的量,通常全用大写字母
属性常量,在声明的同时必须赋值
局部常量,先声明,再赋值
最终方法:此方法将不能被重写
最终类:不能被继承
二、今日内容
1、讲解作业
2、接口 的概念
3、接口的应用
4、工具类的应用
1、讲解作业
【技能点】子类中重写继承下来的方法,没有继承的方法不能重写
构造方法:不能被重写
2、接口 的概念
继承是 is-a的关系
xxx同学是一个程序猿
学生类是子类,程序猿是父类
xxx具有踢足球的能力
问题:踢足球的方法放在程序猿类中合适吗?
不合理,并不是所有程序员对象都会踢足球
使用接口解决上面的问题
接口是 has-a 的关系 有一个能力
子类 extends 父类 implements 接口1,接口2
接口中的成员:
属性:public static final
方法:public abstract
设计程序的时候,把继承的内容放置在父类中,还具备某个能力,但是这个能力不属于父类,那么就放在接口中
java继承的特点:类单继承,接口多实现
【说明】类实现接口后,要实现接口中的所有方法
设计接口有一个原则:接口分离原则—接口中的方法不要太多,是同一方向的方法
【分析】类和接口之间是实现关系implements,类可以实现多个接口
接口之间是多继承的
【强调】接口不能被new ,接口无构造方法
【面试题】接口和抽象类的区别?
1、new 都不能被实例化,但是抽象类有构造方法,接口没有
2、从继承的角度,类是单继承的,接口是多继承、多实现的
3、从成员的角度,抽象类中可以有普通方法、属性、代码块,接口中只能有public static final的属性及public abstract的方法
【面试题】可以说接口是特殊的抽象类,在设计程序时,如何选择设计为抽象类还是接口呢?
从is-a has-a的角度来设计
接口可以用作引用类型,做类型后,限定只能访问接口中的成员
3、面向对象的综合应用
电子宠物系统
电子狗: name age love money strain eat() run() play()
电子猫:name age love money color eat() run() play()
电子企鹅:name age love money addr eat () swim() play()
主人:name money feed() play() buy() sale()
菜单类:
3个属性:存放所有宠物的数组
存放自己宠物的数组
主人属性
方法:循环打印菜单
初始化所有宠物方法
功能
1、查看所有宠物
2、查看自己的宠物
3、喂养
4、买入宠物
5、卖出宠物
6、玩耍