本帖最后由 帅哥哥 于 2014-5-16 22:05 编辑
这就是多态的体现~
in是父类类型的引用,它指向的是子类的一个对象,read()方法在父类中是一个虚方法,子类继承之后实现了read()方法,所以这里 in.read() 调用的是子类的read()方法。
如果子类中还有一个方法叫做show(),父类中没有这个方法,则 in 是不能调用这个 show() 的,除非向下转型。
举个简单的例子说明一下
- abstract class Animal
- {
- abstract void speak();
- }
- class Dog extends Animal
- {
- void speak()
- {
- System.out.println("wangwang...");
- }
- }
- class Cat extends Animal
- {
- void speak()
- {
- System.out.println("miaomiao...");
- }
- void eat()
- {
- System.out.println("eat fish");
- }
- }
- class Demo
- {
- public static void main(String[] args)
- {
- Animal a = null; //a是一个父类的引用
-
- //a指向了子类Dog,和InputStream in = System.in;一个道理
- a = new Dog();
- //运行Dog类中的speak()方法,和in.read();一个道理
- a.speak();
- a = new Cat();
- a.speak(); //同样是a.speak();可是运行结果不一样,这就是多态
- //a.eat();会出错
- ((Cat)a).eat();//向下转型
- }
- }
复制代码
|
-
1.png
(1.04 KB, 下载次数: 11)
|