通过人类继承关系的案例进一步学习Java中的面向对象
5 - 1:阶段练习
普通人都有说话的能力,我们可以用计算机来描述这样的特征。如果是中国人,就那他的语言能力就是直接输出中国人说中国话;如果是我想看到美国人的语言能力,我们就输出美国人说英语。分别在测试类中创建两个对象,当创建的是中国人时他说的是中国话,创建的是美国人时他说的是英语。
中国人和美国人都是人类,就是我们说的Is关系,我们可以以面向对象的继承关系。但中国人的语言能力是中国人说中国话,美国人说美国话,显然如果我写成继承关系,有人类的父类,但人类父类的语言能力满足不了我们的需要,子类都有自己的语言能力。这是我们要用到重写。我们还要思考一个问题,可不可以用多态来想这个问题。中国人和美国人都是人类,我可以用父类引用指向子类对象。
结合上面的特点,这个程序就能写出来了。
5 - 2:代码实现
我们先建一个Project,起名Demo,刚才是中国人是人,美国人是人,,我们就建一个人的父类Person,包名叫com.imooc。人类有说话的能力,在父类里加一个say方法,里面输出人类具有说话的能力。这是父类。我们再写中国人Chinese和美国人American的子类,记着要继承(不加后面测试类会报错)这个父类,然后中国人的say方法里输出中国人说中国话,美国人的say方法里输出美国人说英语。接着创建一个测试类Test,用Chinese和American引用p和p2,输出各自say的方法:
当然也可以用多态,父类的引用指向子类:
完成上面的结果我们还可以用抽象类来表示,因为Person父类只是个规则,没用到里面的方法,抽象类就也能做到了。
我们新建一个抽象类叫APerson,里面创建一个方法但不用实现,叫say,记得要用abstract。这样,这个父类就写好了。
然后修改一下子类,继承APerson就可以了。在main函数里,把Person都改成APerson,这样,执行效果是一样的。