课件中的第一种方案,在Master类中并没有实例化cat,那为什么可以直接用cat调用相应的方法呢?

课件中的第一种方案,在Master类中并没有实例化cat,那为什么可以直接用cat调用相应的方法呢?

package com.imooc.animal;

public class Master {
	/*喂宠物:
	 * 喂猫咪:吃完东西后,主人会带着去玩儿线球
	 * 喂狗狗:吃完东西后,主人会带着狗狗去睡觉
	 */
	
	public void feed(Cat cat) {
		cat.eat();
		cat.playBall();
	}
	
	public void feed(Dog dog) {
		dog.eat();
		dog.sleep();
	}  
}


package com.imooc.test;

import com.imooc.animal.Cat;
import com.imooc.animal.Dog;
import com.imooc.animal.Master;

public class MasterTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Master master=new Master();
		Cat one=new Cat();
		Dog dog=new Dog();
		
		master.feed(one);
		master.feed(dog);
	}
}

课件中的第一种方案,在Master类中的feed()方法中并没有实例化cat和dog,那为什么可以直接用cat和dog调用相应的方法呢?这是什么原理? 求老师解答!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿莹 2019-04-23 09:38:59

因为是这样的:

如果你想调用feed方法,我们就需要传入一个对应类型的对象,这个对象其实是实例化好的:

http://img1.sycdn.imooc.com//climg/5cbe6c8a0001834704970139.jpg

把实例化好的对象传到方法参数中。

方法就会用你传入的对象去调用去进行操作了

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕用6373601 #1
    MasterTest类中的操作我明白,先实例化对象,然后调用feed()方法。我不明白的是Master类中的feed(Cat cat)方法,只是在feed方法的参数中传入了Cat类型的参数cat,也没有实例化cat啊,那为什么就可以用cat调用eat()和playBall()方法了呢?难道在feed()方法中传入参数cat就代表已经实例化了吗?此处百思不得姐!
    2019-04-23 13:49:19
  • 好帮手慕阿莹 回复 提问者 慕用6373601 #2
    1、其实,这里就好比是一个岗位,我们已经知道招聘到的人才都会干啥了(Cat 类型的方法等),就直接分配好工作了(调用对象的方法等)。我们写这个方法的时候也不知道具体是谁来干,但你肯定会有符合要求的来吧(调用方法时传入的对象),你进来后工号就叫cat (Cat cat中传进来的参数以后就叫cat),cat去干啥啥啥(就好比是调用方法)。都直接分配好了,这个方法其实就是一样的。2、同学理解的没错,同学可以理解为已经实例好的,比较你要调用这个方法,就必须穿一个实例好的对象过来,所以,这里我们就可以当它已经实例了,祝学习愉快。
    2019-04-23 14:08:50
好帮手慕阿莹 2019-04-22 10:26:11

其实,这里是要调用这个方法时,必须要求穿对应的参数类型的对象过来,所以要是使用这个方法,必然会有传过来实例化好的这个类型的对象。

其实,参数除了传基本类型,也可以穿引用类型的。这里就和传String类型的参数是一样的,String 也是一个引用类型的,同学可以想象一下,之前传的参数是String类型。

因为我们知道,一定会传一个Cat对象或Dog 对象过来,我们又知道这个类型的对象都有什么方法,

所以,我们就可以在方法中,先用假定以及传过来了一个叫cat的或者dog的对象去调用他肯定有的方法或者属性了。到时候调用该方法时,传过来的这个参数,在方法中就是叫cat或者dog了

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕用6373601 #1
    不是太明白,你是说传入Cat类型的参数cat时,就代表实例化了一个Cat类型的对象?不明白,理解不了啊,求赐教!
    2019-04-22 21:56:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师