本帖最后由 帅哥哥 于 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, 下载次数: 30)
 
 
 
 
 
 
    
    
    
     
 
 |