A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© noiary 高级黑马   /  2014-8-21 15:06  /  1145 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

RT 父类变量引用子类对象后,有哪些优势和缺点?

比如下面代码:
  1. public static void main(String[] args) {
  2.                
  3.                 //fill the people array with Student and Employee objects.
  4.                 Person[] people = new Person[2];
  5.                 people[0] = new Employee("XiaoZhang", 50000, 1989, 2, 15);
  6.                 people[1] = new Student("XiaoMing", "JAVA");
  7.                 //print out names and description of all Person objects.
  8.                
  9.                 for(Person p : people)
  10.                         print(p.getName() + ", " + p.getDescription());

  11.         }
复制代码


我知道可以集中调用子类共同拥有的方法 ,如gerName()等, 这应该算优势之一吧 ,  还有其他的吗, 有哪些缺点?

另外,people[0]为什么不能调用Employee的getSalary()方法?

如:
  1. people[0].getSalary()
复制代码


这样会报错,说找不到符号:方法getSalary(),为什么呢?
  1. PersonTest.java:23: 找不到符号
  2. 符号: 方法 getSalary()
  3. 位置: 类 Person
  4.                 print(people[0].getSalary());
复制代码

3 个回复

倒序浏览
提高代码的健壮性
父类变量引用子类对象:最常用的就是接口!
比如,某个函数需要接受某个接口类型的变量,那么我只要实现了这个接口的变量类型就都能使用这个功能
更简单点:当我们设计电脑网卡插槽的时候,我们不知道以后可能会出现什么类型的网卡,但我们给这些网卡设置一些标准,就是接口了~只要后面出现的网卡满足我这个接口的要求,电脑就能使用这个网卡

people[0]为什么不能调用Employee的getSalary()方法?
很简单,比如jdk 1.4能用jdk 1.5的新特性么!当然不能,后面出现的事物(子类)的一些新特性(新方法),现在的事物(父类)是不知道的,也就是不能使用的!

回复 使用道具 举报
笑脸迷人 发表于 2014-8-21 18:34
提高代码的健壮性
父类变量引用子类对象:最常用的就是接口!
比如,某个函数需要接受某个接口类型的变量, ...

很全面 ,谢谢啦~  

提问的时候还没学到这里,我以为学过了,自己在哪敲代码,结果报错,郁闷好好久  .

多敲代码最实用,每敲一遍,脉络清晰很多 .  一起加油小伙伴~
回复 使用道具 举报
路过,,,:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马