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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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