发布时间 : 星期五 文章第4章面向对象(下) - 补充案例课件更新完毕开始阅读
博学谷——让IT教学更简单,让IT学习更有效
}
// 学号
private int sid;
public void setSid(int sid) { }
public int getSid() { }
// 我们的需求是学号相同的人就是同一个人. public boolean equals(Object obj) { }
// 判断是否为当前对象 if (this == obj) { }
// 为了呈现的健壮性,加入类型判断 if (!(obj instanceof Student)) { }
Student s = (Student) obj; return (this.sid == s.sid);
return false; return true; return sid; this.sid = sid;
2、定义测试类Example12,为学号赋值,并打印使用“==”和重写equals()方法的比较结果,代码如下:
public class Example12 { }
public static void main(String[] args) { }
Student Lily = new Student(); Lily.setSid(200);
Student Lucy = new Student(); Lucy.setSid(200);
System.out.println(\System.out.println(\
运行结果如图4-12所示。
图4-12 运行结果
17
博学谷——让IT教学更简单,让IT学习更有效
三、案例总结
1、Object类是Java中所有类的父类,每个类都直接或间接继承自该类。
2、Object类中的equals()方法比较的是内存地址值,和“==”比较结果一致。底层代码如下:
public boolean equals(Object obj) { return (this == obj); }
实际开发中很少比较内存地址值,所以我们常常会根据自身需求重写equals()方法。
案例4-13 多态的作用 一、案例描述
1、 考核知识点
编 号:00104009 名 称:多态
2、 练习目标
? 了解多态的概念、多态的好处和弊端 ? 掌握如何实现多态
3、 需求分析
在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。多态提高代码了的扩展性和可维护性。为了帮助初学者掌握如何实现多态,本案例将实现一个多态程序来演示如何实现多态。
4、 设计思路(实现原理)
1)编写Animal接口,接口中定义sleep()方法。
2)Cat类实现Animal接口的方法,并定义另一个方法catchMouse()
3)编写测试类Example13,使Cat对象指向父类Animal的引用 ,并通过该引用调用sleep()方法。
二、案例实现
1、编写Animal接口及其实现类Cat。代码如下:
interface Animal { }
class Cat implements Animal {
void catchMouse() { }
public void sleep() { }
18
System.out.println(\睡觉\System.out.println(\抓老鼠\void sleep();
博学谷——让IT教学更简单,让IT学习更有效
}
2、定义测试类Example13,Cat对象指向Animal引用,并使用父类Animal引用调用sleep()方法。代码如下:
public class Example13 { }
public static void main(String[] args) { }
// 多态
Animal animal = new Cat(); animal.sleep();
运行结果如图4-13所示。
图4-13 运行结果
三、案例总结
1、多态是指对象在不同时刻表现出来的不同状态,在Java中,允许使用一个父类类型的变量来引用一个子类类型的对象。
2、多态的前提:
(1) 要有继承关系。 (2) 要有方法重写。
(3) 要有父类引用指向子类对象。
3、多态的好处是提高代码的扩展性和可维护性。
4、多态的弊端是父类或者接口只能调用自己具备的成员,不能访问子类特有的成员。
案例4-14 对象的类型转换 一、案例描述
1、 考核知识点
编 号:00104010
名 称:对象的类型转换 2、 练习目标
? 掌握如何实现对象的类型转换
3、 需求分析
在多态的学习中,涉及到将子类对象当做父类类型使用的情况,这时进行强制类型转换可能会出现出错。为了让初学者熟悉对象的类型转换,本案例将演示一个子类与父类之间类型转换过程中出现的错误。
编写一个接口Animal,接口中定义sleep()方法,编写两个类Cat和Pig分别实现接口,再编写一
19
博学谷——让IT教学更简单,让IT学习更有效
个测试类Example14实现对象的类型转换。
4、 设计思路(实现原理)
1)编写Animal接口,接口中定义sleep()方法。 2)Cat类和Pig类分别实现Animal接口的方法 3)编写测试类Example14对对象的类型进行转换,使Cat向上转型为Animal类型,然后再让Animal类型转换为Pig类型。
二、案例实现
1、编写Animal接口及其实现类Cat。代码如下:
interface Animal { }
class Cat implements Animal { }
class Pig implements Animal { }
public void sleep() { }
System.out.println(\猪整天睡觉\public void sleep() { }
System.out.println(\猫晚上睡觉\void sleep();
2、定义测试类Example14,Cat对象指向Animal引用,并使用父类Animal引用调用sleep()方法。代码如下:
public class Example14 { }
public static void main(String[] args) { }
Animal animal = new Cat(); Pig pig = (Pig) animal; pig.sleep();
运行结果如图4-14所示。
图4-14 错误提示
三、案例总结
1、向下类型转换时,需要注意被转换对象的真实类型是否和需要转换的对象类型相同,否则容易报
20