如果我先创建了一个父类public class Animal { public int age; } //赋予了属性,没有初始化值, 然后创建个子类 ,继承父类,但是每种动物活着的年龄不同,所以我创建的子类中对age这个属性进行了赋值:public class dog extends Animal {public int age=20; }//第一个子类public calss cat extends Animal{public int age=30; }//第二个子类.然后在测试类里进行调用运行public class Chaxun {public static void main(String[] args) { // TODO Auto-generated method stub Animal age1=new dog(); Animal age2=new cat();System.out.println("狗的寿命是"+age1.age)System.out.println(“猫的寿命是"+age2.age) }} //这样输出为什么age的值是0,子类中不是进行赋值了吗???
4 回答
已采纳
Its_forever
TA贡献361条经验 获得超328个赞
你这两句: Animal age1=new dog(); Animal age2=new cat(); 相当于向上转型,age1和age2都指向的是animal这个父类。 所以age1.age和age2.age都是输出父类的age,默认值为0。 如果你想输出之类的age,改成这样: dog age1=new dog(); cat age2=new cat();
儁破孩
TA贡献19条经验 获得超5个赞
在多态中,注意属性没有多态的概念,只有方法才有多态的概念。属性的值是多少由声明时类型(也就是编译类型)的对象决定,而方法的调用由实际对象的类型(也就是运行时类型)所决定。如果这里子类去重写父类的某个方法,那么这里你去调用重写的方法,会出现什么样的情况呢?自己去实践o(∩_∩)o
星际怪物
TA贡献31条经验 获得超10个赞
Animal age1 = new dog(); //age1 向上转型为Animal,
System.out.println(...., age1.age)//此处 age1.age 就是 super.age,为0
添加回答
举报
0/150
提交
取消