首先放上源文件
父类 Animal.java
package com.imooc; public class Animal { public void eat(){ //注意这个eat方法 System.out.println("动物具有吃的能力"); } } 子类 Dog.java package com.imooc; public class Dog extends Animal { public void eat(){ //重写父类的eat方法 System.out.println("狗是吃肉的"); } public void watchDoor(){ //子类中独有的方法,思考如何调用它呢? System.out.println("狗具有看门的能力"); } } 子类 Cat.java // 直接继承父类文件,没有任何修改代码的操作 package com.imooc; public class Cat extends Animal { } 主函数 Initial.java public class Initial { public static void main(String[] args) { // TODO Auto-generated method stub Animal animal1 = new Animal();//animal1 /2/3都是引用,引用指向的是本类或者子类对象 Animal animal2 = new Dog();//父类的引用是可以指向子类的对象的 Animal animal3 = new Cat(); animal1.eat(); //animal1是创建的父类本身的对象,所以其执行的是父类下的eat方法 animal2.eat(); //animal2是创建的子类的对象,所以其执行的是Dog类下重写的eat方法 animal3.eat(); //animal3是创建的子类的对象,所以其执行的是Cat类下的继承于Animal的eat方法 //animal2.watchDoor(); 这个代码是错误的,父类的引用不能直接调用子类的方法 Dog dog = (Dog)animal2; //将父类引用强制转换成子类,功能变强大了 dog.watchDoor(); // 可以执行子类独有的方法 } } 运行结果: 动物具有吃的能力 狗是吃肉的 动物具有吃的能力 狗具有看门的能力
