class Animal{int height;void sleep(){System.out.println("Animal sleep");System.out.println("height="+height);}}class Fish extends Animal{int height;void sleep(){super.height=30;super.sleep();System.out.println("Fish sleep");}}class Inteqration{static void fh(Animal an) //参数的类型可以用父类的名字定义吗?而且方法体中怎么用参数调用的前面sleep方法啊 ?{an.sleep();}public static void main(String []args){Fish fh=new Fish();Animal an; //用父类的名字定义类型?那么an到底是什么呢?an=fh; //把对象的值赋给an?Inteqration.fh(an); //调用fh时要把参数写进去吗?如果在定义时没有参数,这里是不是就不用写参数了?}}
1 回答

暮色呼如
TA贡献1853条经验 获得超9个赞
第一个问题:
static void fh(Animal an) //参数的类型可以用父类的名字定义吗?而且方法体中怎么用参数调用的前面sleep方法啊 ?
回答:参数的类型可以用父类的名字定义,方法体中使用an.sleep()是调用父类Animal中的sleep()方法,如果想调用类Fish中的sleep()方法,这样写:
if (an instanceof Fish)
{
((Fish)an).sleep();
}
第二个问题:
Animal an; //用父类的名字定义类型?那么an到底是什么呢?
回答:这是声明一个Animal类型的变量,这个an其实就是一个Animal,而Fish继承了Animal,任何Animal的子类,都可以用来实例化an这个变量
比如:Animal an = new Fish();
第三个问题:
an=fh; //把对象的值赋给an?
回答:从Fish fh=new Fish(); 可以看出,fh是Fish的一个实例,而Fish继承Animal,所以可以将fh对象赋值给an(实际上是一个引用)
第四个问题:
Inteqration.fh(an); //调用fh时要把参数写进去吗?如果在定义时没有参数,这里是不是就不用写参数了?
回答:调用fh时要把参数写进去的,而且参数类型必须符合开始定义的类型;如果在定义时没有参数,这里就不用写参数
添加回答
举报
0/150
提交
取消