4 Java基础09-面向对象【多态】( 二 )


课堂练习-
定义三个类,父类GeometricObject代表几何形状,子类Circle代表圆形,MyRectangle代表矩形 。定义一个测试类GeometricTest,编写equalsArea方法测试两个对象的面积是否相等(注意方法的参数类型,利用动态绑定技术),编写displayGeometricObject方法显示对象的面积(注意方法的参数类型,利用动态绑定技术) 。
练习题
import java.util.Random;//面试题:多态是编译时行为还是运行时行为?//证明如下:class Animal{protected void eat() {System.out.println("animal eat food");}}class Catextends Animal{protected void eat() {System.out.println("cat eat fish");}}class Dogextends Animal{public void eat() {System.out.println("Dog eat bone");}}class Sheepextends Animal{public void eat() {System.out.println("Sheep eat grass");}}public class InterviewTest {public static AnimalgetInstance(int key) {switch (key) {case 0:return new Cat ();case 1:return new Dog ();default:return new Sheep ();}}public static void main(String[] args) {int key = new Random().nextInt(3);System.out.println(key);Animalanimal = getInstance(key);animal.eat();}}
2 代码块
代码块(或初始化块)的分类:
代码块通常用于初始化的属性
class Person { public static int total; static {total = 100;//为total赋初值}…… //其它属性或方法声明 }
示例代码
class Person {public static int total = 100;static {total = total + 50;System.out.println("in static block!");}}public class PersonTest {public static void main(String[] args) {System.out.println("total = " + Person.total);System.out.println("total = " + Person.total);} }
3 类 3.1 介绍
public class Person {...}等价于:public class Person extends Object {...}
3.2 主要结构
3.3 ()方法
如果要自定义对象相等的判断逻辑,就需要重写()方法
( obj){
? if (obj) {
?this.name == ( () obj ) . name;
? } else {
?false;
? }
特例:当用()方法进行比较时,对类File、、Date及包装类( Class)来说,是比较类型及内容而不考虑引用的是否是同一个对象;
当自定义使用()时,可以重写 。用于比较两个对象的“内容”是否都相等
重写()方法的原则
面试题:==和的区别
==既可以比较基本类型也可以比较引用类型 。对于基本类型就是比较值,对于引用类型就是比较内存地址
的话,它是属于java.lang.类里面的方法,如果该方法没有被重写过默认也是==;我们可以看到等类的方法是被重写过的,而且类在日常开发中** 用的比较多,久而久之,形成了是比较值的错误观点 。
具体要看自定义类里有没有重写的方法来判断 。
通常情况下,重写方法,会比较类中的相应属性是否都相等 。
课堂练习
int it = 65;float fl = 65.0f;System.out.println(“65和65.0f是否相等?” + (it == fl));//truechar ch1 = 'A'; char ch2 = 12;System.out.println("65和'A'是否相等?" + (it == ch1));//trueSystem.out.println(“12和ch2是否相等?" + (12 == ch2));//trueString str1 = new String("hello");String str2 = new String("hello");System.out.println("str1和str2是否相等?"+ (str1 == str2));//falseSystem.out.println("str1是否equals str2?"+(str1.equals(str2)));//trueSystem.out.println(“hello” == new java.util.Date());
课堂练习-
编写Order类,有int型的orderId,String型的orderName,相应的getter()和setter()方法,两个参数的构造器,重写父类的equals()方法:public boolean equals(Object obj),并判断测试类中创建的两个对象是否相等 。