黑马程序员技术交流社区

标题: 对象的转型和方法的重写(override) [打印本页]

作者: DD_vincent    时间: 2015-7-22 16:47
标题: 对象的转型和方法的重写(override)
  1. class Person{
  2.         String name;
  3.         int age;
  4.        
  5.         public void talk(){
  6.                 System.out.print("111");
  7.         }
  8. }
复制代码

  1. class Student extends Person{
  2.         String address;
  3.        
  4.         public void talk(){
  5.                 System.out.print("222");
  6.         }
  7.        
  8.         public void study(){
  9.                 System.out.print("study");
  10.         }
  11. }
复制代码

  1. class Test{
  2.         public static void main(String[] args){
  3.                 Student a = new Student();
  4.                 Person b = new Student();
  5.                
  6.                 a.talk();
  7.                 b.talk();
  8.                
  9.                 a.study();
  10.         //因为b是Person累的,所以b不能调用Student的study()方法。这里会报错
  11.         //b.study();
  12.         }       
  13. }
复制代码


在JAVA中,可以将子类对象赋给父类引用,但是“ 一个引用能够调用的成员,取决于这个引用的类型 ”。也就是说,如果我在Person类的b引用上是不能调用Student类的study()方法的。
但是,当子类将父类方法重写之后,最终调用的都是重写以后的方法,这个时候似乎又是由这个引用实际所指向的对象来决定能够调用的成员。这是为什么?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2