黑马程序员技术交流社区
标题:
方法的调用问题
[打印本页]
作者:
て淡莣了陌生
时间:
2013-4-25 09:23
标题:
方法的调用问题
class Test1
{
public static void main(String[] args)
{
Person p=new Person();
Dog dog =new Dog();
p.show(dog);
}
}
class Person
{
void eat(){
System.out.println("人吃肉");
}
void show(Dog dog){
eat();
}
}
class Dog
{
void eat(){
System.out.println("狗吃骨头");
}
}
这段代码调用eat()方法时为什么不是调用的class Dog中的eat()方法,求解释!
作者:
高新星
时间:
2013-4-25 09:30
class Test {
public static void main(String[] args) {
Person p = new Person();
Dog dog = new Dog();
p.show(dog);
}
}
class Person {
void eat() {
System.out.println("人吃肉");
}
void show(Dog dog) {
eat(); //省略了this.;调用的是本类对象的eat()方法
dog.eat(); //要调用dog中的eat()就应该使用dog的对象,
}
}
class Dog {
void eat() {
System.out.println("狗吃骨头");
}
}
复制代码
作者:
刘胜寒
时间:
2013-4-25 09:52
Person类要调用Dog的eat方法时,要先创建Dog类的实例,然后实例名.eat();这样才会调用Dog的吃骨头。
否则只是调用本类的成员函数eat();
其实就是this.eat();
作者:
郭军亮
时间:
2013-4-25 10:03
class Test1
{
public static void main(String[] args)
{
Person p=new Person();
Dog dog =new Dog();
p.show(dog);
}
}
class Person
{
void eat(){
System.out.println("人吃肉");
}
void show(Dog dog){
eat();// 这里调用的是默认的Person类的eat()方法。要想调用dog类的eat()方法,需要在前面加上类名,如dog.eat().
}
}
class Dog
{
void eat(){
System.out.println("狗吃骨头");
}
}
你在person类中调用的eat()方法就默认是Person的类方法,即this.eat()方法。想调用Dog类的方法要用dog.eat()才可以的。
作者:
harborbest
时间:
2013-4-25 10:42
class Person
{
void eat(){
System.out.println("人吃肉");
}
void show(Dog dog){
eat(); //这里其实jvm在解析的时候,你什么都没加,它先从自身类里边找这个方法,有就调用了。如果想要调用Dog里边的那么你必须这样写dog.eat(),这样你就告诉jvm我要调用的是dog里边的方法
}
}
作者:
袁梦希
时间:
2013-4-25 14:26
版主拎包郑重提示:如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记成“已解决”。就OK了{:soso_e102:}
作者:
孙金鑫
时间:
2013-4-25 15:56
本帖最后由 孙金鑫 于 2013-4-25 15:58 编辑
class Test1
{
public static void main(String[] args)
{
Person p=new Person();
Dog dog =new Dog();
p.show(dog);
}
}
class Person
{
void eat(){
System.out.println("人吃肉");
}
void show(Dog dog){
eat(); //如果用dog的eat方法,这里需要用dog.eat()。这里你写的eat调用的是class Person本类的eat方法。
}
}
class Dog
{
void eat(){
System.out.println("狗吃骨头");
}
}
复制代码
作者:
hacket
时间:
2013-4-25 16:57
void show(Dog dog){
eat();
}
复制代码
eat()其实是省略了this关键字,this.eat();
作者:
吴波
时间:
2013-4-25 17:16
Person p=new Person();
Dog dog =new Dog();
p.show(dog);
p.show()调用的是Person对象里面的show函数,然后传的一个参数进去,接着又调用了本类中的eat()其实前也省略了this关键字
也可以这么理解:方法先从本类中找,找不到,再从其他类中找。
作者:
蒋名勇
时间:
2013-4-25 21:08
你没有调到dog的eat()方法,是因为,你只是把dog对象通过参数的形式传了进去,但是没有调用对象来调方法,自然就不可能有你说的那种效果咯
作者:
黄玉昆
时间:
2013-4-25 23:10
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
作者:
郑才熹
时间:
2013-4-26 10:47
构造方法相互调用时this(这里省略了this)指代本类类名。因为Person类里面定义了eat()方法,当调用show方法时,先在本类找,正好Person类中有eat()方法,就直接调用了。当Person类中没有时,就会在其他类中查找,此时才会调用Dog类中的eat()方法。如果想直接调用Dog类中的eat(),就需要把Person类中的eat()变为Dog.eat()。
希望能帮到你!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2