JAVA笔记(十一)--多态和抽象方法

208 阅读3分钟

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;

​ (***)一般该关键字与类型转换结合使用

问题:

​ 抽象方法如何在实际中使用?使用的时候如果都是放入到抽象类中麻烦,如何解决?

​ 一个类中只有抽象方法--接口