首先放上源文件
父类 Animal.java
package com.imooc;
public class Animal {
public void eat(){ //注意这个eat方法
System.out.println("动物具有吃的能力");
}
}
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("狗具有看门的能力");
}
}
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(); // 可以执行子类独有的方法
Dog dog = (Dog)animal2; //将父类引用强制转换成子类,功能变强大了
dog.watchDoor(); // 可以执行子类独有的方法
}
}
运行结果:
动物具有吃的能力
狗是吃肉的
动物具有吃的能力
狗具有看门的能力
狗是吃肉的
动物具有吃的能力
狗具有看门的能力