黑马程序员技术交流社区

标题: 关于this的调用。看见了这样一道题。求解答 [打印本页]

作者: lvyanxin    时间: 2016-8-7 23:47
标题: 关于this的调用。看见了这样一道题。求解答
class Grandfather
{       
        public void print()
        {       
                System.out.println("Grandfather") ;
        }
};


class Father extends Grandfather
{               
        public void print()
        {
                System.out.println("father") ;
        }
        public void funFather()
        {       
                this.print() ;       
                super.print() ;       
        }
};


class Child extends Father{        // 定义继承关系
        public void print()
        {       
                System.out.println("child") ;
        }
        public void funChild()//避免覆写
        {
                this.print() ;       
                super.print() ;       
        }
       
};


public class test3{
        public static void main(String args[])
        {
                Child s = new Child() ;
                s.funFather() ;//此处通过继承调用父类函数中的     this.print与super.print
                s.funChild();//此处直接调用子类类                this.print与super.print
        }
};
输出为
child
Grandfather
child
father
--------------------------------------------------------------------------------------------------------------------------------------------

class Father{               
        private void print()
        {       
                System.out.println("Father") ;
        }
        public void fun2()
        {       
                this.print() ;        // 调用print()方法
        }
};


class Child extends Father{        // 定义继承关系
        void print(){        // 覆写父类中的方法
                System.out.println("Child") ;
        }
        public void fun()
        {       
                this.print() ;       
        }
};
public class test3
{
        public static void main(String args[])
        {
                Child s = new Child() ;
                s.fun() ;
                s.fun2();
        }
};
输出为
Child
Father


this 不是应该指向当前对象么,为什么会这个输出 Father,而上一个程序都是child



作者: Tao_tao    时间: 2016-8-7 23:55
s.fun2();调用的是父类中的方法  虽然this指向当前对象 但是由于子类中没有重写此方法,此时写this和super效果是一样的
作者: 稻草帽    时间: 2016-8-8 00:05
楼上大神,正解
作者: 爱学习爱java..    时间: 2016-8-8 08:39
楼主懂了吗?第一种代码我感觉还是father那个。。第二种为啥father类方法为private?child又没有修饰方法呢?新手不懂,别嫌我的问题幼稚啊
作者: tanrenwei    时间: 2016-8-8 21:27
已经在子类中调用父类方法了
作者: lvyanxin    时间: 2016-8-8 23:04
Tao_tao 发表于 2016-8-7 23:55
s.fun2();调用的是父类中的方法  虽然this指向当前对象 但是由于子类中没有重写此方法,此时写this和super ...

没理解啊,为什么没有重写print。this与super效果相同
作者: lvyanxin    时间: 2016-8-8 23:05
爱学习爱java.. 发表于 2016-8-8 08:39
楼主懂了吗?第一种代码我感觉还是father那个。。第二种为啥father类方法为private?child又没有修饰方法呢 ...

还在迷糊中。。。
作者: lvyanxin    时间: 2016-8-8 23:18
tanrenwei 发表于 2016-8-8 21:27
已经在子类中调用父类方法了

具体讲解一下。大神
作者: 爱学习爱java..    时间: 2016-8-9 16:25
貌似还没有解决
作者: 爱学习爱java..    时间: 2016-8-9 16:27
貌似还没有解决。
作者: wq1194165366    时间: 2016-8-9 21:19
有一句话是父类中的私有方法是不能被子类所继承的,也就是说你的print2是私有的
你这里涉及的是 你在主函数中 创建了子类对象, 而在父类中,用了this,我感觉这个this不是代表子类,而是代表当前对象
即父类.因为你要去调用父类中私有方法 ,只能是父类本身去访问, s.fun()是调用自己本身的方法
s.fun2()是通过父类调用自己的方法 然后进行访问父类中的私有方法.
个人理解.勿喷.
作者: FunnyKing    时间: 2016-8-9 21:56
刚开始学 ,不懂
作者: wmc1994    时间: 2016-8-10 22:39
楼主可以详细的讲解一下这个流程




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2