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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

比如:ArrayList  b=new ArrayList(Object obj)
          b.add(new Person())//Person也是个类,就不写了
         为什么 又说其实是多态Object obj=new Person()啊?
         拐不来弯

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 加油,越学到后面思路越清晰

查看全部评分

8 个回复

倒序浏览
其实你不应该这么理解。你可以建三个类。Person  man woman 三个类,man和woman继承person.

可以写成 person p = new man(); 这样比较容易理解,父类的引用p指向了子类对象man 。

集合特点是能存储任意类型的对象,所以add方法里面是Object obj类型,这里是为了能接收任意类型的对象。排除使用泛型。

又比如: List list = new ArrayList();
             List list = new LinkedList();

多态这种东西还是不太好说,给你看下我的笔记吧,希望对你有帮助

多态的简单理解:可以简单理解为事物的多种形态。
1.多态的体现:
父类的引用指向了本类的子类对象。
父类的引用也可以接收自己的子类对象
  1. 方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。
  2.   要理解多态性,首先要知道什么是“向上转型”。
  3. 我定义了一个子类woman,它继承了person,那么后者就是前者的父类,我可以通过
  4. woman w = new woman();


  5. 实例化一个woman的对象,这个不难理解,但当我这样定义时:
  6. person p = new woman();


  7. 这代表什么意思呢:
  8. 很简单,它表示我定义了一个person类型的引用,指向新建的woman类型的对象。由于woman继承自父类person,所以person类型的引用
  9. 是可以指向woman类型的对象的。有什么意义呢?因为子类是父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特。
  10. 定义一个父类类型的引用指向一个子类的对象即可以使用子类强大的功能,又可以抽取父类的共性。
  11. 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的。

  12. 代码示例:
  13. public class Temp
  14. {
  15.         public static void main(String[] args)
  16.         {
  17.                 person p = new woman();//类型提升,向上转型。
  18.                 p.work();//向上转型以后可以调用父类中的方法,但是对子类的特有方法无可奈何。
  19.                
  20.                
  21.                 //如果要调用woman的特有方法,如何操作?
  22.                 //强制将父类的引用,转成子类类型,向下转型。
  23.                 woman w = (woman) p;//将p强制转换成子类类型
  24.                 w.birth();//调用子类的特有方法
  25.                
  26.                 //千万不要出现这样的操作,就是将对象转成子类类型
  27.                 //我们能转换的是父类引用指向了自己的子类对象时,该引用可以被提升,也可以被强制转换。
  28.                 //person p = new person();
  29.                 //woman c = (woman) p;
  30.         }

  31. }

  32. abstract class person //向上抽取出人这个类
  33. {
  34.         public abstract void work();//抽取出的共性方法,工作具体内容不知道怎么实现,用abstract来修饰
  35. }

  36. class woman extends person //女人这个类继承了人这个类
  37. {
  38.         public void work() //重写父类的抽象方法
  39.         {
  40.                 System.out.print("劳动");
  41.         }
  42.         public void birth() //子类对象特有的方法,生育功能。
  43.         {
  44.                 System.out.print("生宝宝");
  45.         }
  46. }

  47. class man extends person
  48. {
  49.         public void work() //复写父类抽象方法
  50.         {
  51.                 System.out.print("重体力劳动");
  52.         }
  53.         
  54. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 回答很详细!

查看全部评分

回复 使用道具 举报 1 0
ArrayList  b=new ArrayList(Object obj)
这句代码是为了说明ArrayList集合中要存放一个对象,
Object obj=new Person();//而Person就是一个Object的子类对象
b.add(new Person());//这里是添加了子类的对象
而Object类是所有类的父类,这里是父类的引用指向了子类的对象。
多态:是一个引用引用变量绑定到各种不同的类实现上,不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 很给力!

查看全部评分

回复 使用道具 举报
@ne_pie尒ce 发表于 2013-11-19 11:51
ArrayList  b=new ArrayList(Object obj)
这句代码是为了说明ArrayList集合中要存放一个对象,
Object ob ...

very nice!!!!!
回复 使用道具 举报
kellyzyb 发表于 2013-11-19 09:45
其实你不应该这么理解。你可以建三个类。Person  man woman 三个类,man和woman继承person.

可以写成 pers ...

很详细,学习了,谢谢
回复 使用道具 举报
kellyzyb 发表于 2013-11-19 09:45
其实你不应该这么理解。你可以建三个类。Person  man woman 三个类,man和woman继承person.

可以写成 pers ...

很详细,学习了,谢谢
回复 使用道具 举报
帖子已分类~
回复 使用道具 举报
潜伏 中级黑马 2013-11-19 18:51:18
8#

您辛苦了
回复 使用道具 举报
ArrayList  b=new ArrayList(Object obj)//这句代码是为了说明ArrayList集合中要存放一个对象,
Object obj=new Person();//而Person就是一个Object的子类对象
b.add(new Person());//这里是添加了子类的对象,而Object类是所有类的父类,这里是父类的引用指向了子类的对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马