A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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


12 个回复

倒序浏览
s.fun2();调用的是父类中的方法  虽然this指向当前对象 但是由于子类中没有重写此方法,此时写this和super效果是一样的
回复 使用道具 举报
楼上大神,正解
回复 使用道具 举报
楼主懂了吗?第一种代码我感觉还是father那个。。第二种为啥father类方法为private?child又没有修饰方法呢?新手不懂,别嫌我的问题幼稚啊
回复 使用道具 举报
已经在子类中调用父类方法了
回复 使用道具 举报
Tao_tao 发表于 2016-8-7 23:55
s.fun2();调用的是父类中的方法  虽然this指向当前对象 但是由于子类中没有重写此方法,此时写this和super ...

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

还在迷糊中。。。
回复 使用道具 举报
tanrenwei 发表于 2016-8-8 21:27
已经在子类中调用父类方法了

具体讲解一下。大神
回复 使用道具 举报
貌似还没有解决
回复 使用道具 举报
貌似还没有解决。
回复 使用道具 举报
有一句话是父类中的私有方法是不能被子类所继承的,也就是说你的print2是私有的
你这里涉及的是 你在主函数中 创建了子类对象, 而在父类中,用了this,我感觉这个this不是代表子类,而是代表当前对象
即父类.因为你要去调用父类中私有方法 ,只能是父类本身去访问, s.fun()是调用自己本身的方法
s.fun2()是通过父类调用自己的方法 然后进行访问父类中的私有方法.
个人理解.勿喷.
回复 使用道具 举报
刚开始学 ,不懂
回复 使用道具 举报
楼主可以详细的讲解一下这个流程
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马