父类引用子类对象为什么点不出来..........Cat继承Animal

static Animal[] animals = new Animal[3];

public static void main(String[] args) {

animals[0] = new Cat("咖菲猫", "优");
    animals[1] = new Ya("唐小鸭", 2);
    animals[2] = new Shark("小鲨", 0);

for(int i=0;i<animals.length;i++){
System.out.println(animals[i].(这里点不出子类独有的属性));

因为你声明的是animal的数组,默认获取也是animal的对象(尽管你放进去的是子类对象)。你获取到的animal[0]中包含所有的cat信息,只是animal中没有那些属性,所以。
不出来。想使用,可以试一下强制类型转换。

应该用指针或引用,而不是对象。记得有本书中有解释,找不到了,下面是重网上截取的一段解释(http://www.xuebuyuan.com/1131765.html):
要虚函数发挥作用,必须用基类的指针(或引用)指向派生类的对象,并用指针(或引用)调用虚函数。也就是说,只有用地址才能体现运行多态性。因为不论是指向基类还是指向派生类的指针(引用),大小都是一样的,这样才能用基类指针指向派生类对象。这时,指针提供的信息是不完全的,在编译阶段不知道应该调用虚函数的哪个版本。而如果用对象调用虚函数,由于类型已经确定了,因此编译系统很可能采用预绑定

子类转成父类后,子类的属性已经不能使用(子类相关属性方法回隐式的保存起来,但已经不能使用)
java中任何子类都可以转成父类(一般子类中的东西会比父类多,所以这是做减法,只要把不是父类中的东西保存一下,是父类的就直接放在父类,
所以子类转父类可以实现)。

父类转子类就需要讨论了
1.如果这个父类就是来源于new出来的父类,本身就没有子类中任何信息,这时候父类是不能强转子类的(毕竟子类的东西多,父类并不能把子类的数据
补全)。

2.如果这个父类的实例就是子类强转过来,这时候这个父类就可以在转为子类,因为子类在转父类时子类相关数据并没有丢失。

 public void run(){

        A a = new A();
        a.a=1;

        Object o = a;//子类转父类

        A b = (A)o;//还可以转回子类
        System.out.println(b.a);

        Object o1 = new Object();
        A c = (A)o1;//这时就会报错,提示不能强转

        System.out.println(c.a);
    }

相信上面已经把java父子类之间的转换将明白了。

如果你的Object的实例来源跟Tuple类没有关系,那就不能强转,你只能自己手动new Tuple(),并且把相关参数设置进去。

存手打,望采纳。
有不明白的地方可以 继续交流

你那里new的是本身,没有向上转型所以他只有本身的属性

static Animal animals = new Cat();
你换成这样是可以的,,,建议去看看多态的有关章节。