黑马程序员技术交流社区

标题: 父类变量引用子类对象有哪些优缺点? [打印本页]

作者: noiary    时间: 2014-8-21 15:06
标题: 父类变量引用子类对象有哪些优缺点?
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());
复制代码

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

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


作者: noiary    时间: 2014-8-23 08:48
笑脸迷人 发表于 2014-8-21 18:34
提高代码的健壮性
父类变量引用子类对象:最常用的就是接口!
比如,某个函数需要接受某个接口类型的变量, ...

很全面 ,谢谢啦~  

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

多敲代码最实用,每敲一遍,脉络清晰很多 .  一起加油小伙伴~
作者: iefegend    时间: 2014-8-23 10:32
路过,,,:)




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