JAVA笔记(十一)--多态和抽象方法
1.Object:
Object是所有类的父类,所有对象(包括数组)都实现这个类的方法--继承
2.重写equals方法:
1.如果比较的两个对象的地址完全一致,那么两个对象肯定相等
2.如果比较的两个对象的类型不一致,那么两个对象对象不相等
3.地址不同,类型一致,需要通过比较属性确定两个对象是否一致
作业:
重写equals方法比较学生对象
studentNo,name,age,height;
3.电子宠物系统:
父类:Pet:
-name,-health,-love;昵称,健康值,亲密度
+print、set/get---
子类: Dog extends Pet
-strain,品种
子类: Penguin
-sex,性别
4.抽象方法:
a.why:
在一些场合,多个子类需要重写父类同名方法,但是每个子类的实现不同,父类的该方法实现没有任何意义--冗余?
b.what:
被abstract修饰的方法为抽象方法,该方法没有方法体;
c.语法:
修饰符 abstract 返回值 方法名(参数列表);
d.注意事项:
1).抽象方法必须在抽象类中;
2).抽象方法必须在其子类被实现,除非子类也是抽象类;
5.抽象类:
a.what:
被abstract修饰的类
b.注意事项:
1).抽象类不能被实例化---不能直接创建对象;
2).抽象类中可以没有抽象方法,但是如果一个类中含有抽象方法,那么该类必须是抽象类
6.final:
1).final class:
被fianl修饰的类不允许继承;
2).final print():
被final修饰的方法不允许被重写;
3).fianl 变量:
被final修饰的变量为常量,不能重新赋值,即使重新赋值的值为相同也不可以
(*)使用final修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的
------------------------------------------------------------
问题:宠物喂食方法优化?
1.多态:
a.why:
有些场合,方法体相同,但是条件不一致导致结果不一致,如果编写多个方法事项-可扩展性差、可维护性差;
b.同一个引用类型,使用不同的实例而执行不同操作 ---父类引用指向子类对象
c.how:
1)多态的实现条件:
编写具有继承关系的父类和子类
子类重写父类方法
使用父类的引用指向子类的对象 --如何指向;
2)多态的实现方法:
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
3)eg:
参数--喂食案例
返回值--领养案例
结合使用--玩耍案例
2.instanceof:
a.语法:
对象 instanceof 类或接口
如果左边对象是右边类的实例,返回true,否则为false;
如果左边对象实现了右边接口,返回true,否则为false;
(***)一般该关键字与类型转换结合使用
问题:
抽象方法如何在实际中使用?使用的时候如果都是放入到抽象类中麻烦,如何解决?
一个类中只有抽象方法--接口