黑马程序员技术交流社区

标题: this和super关键字 [打印本页]

作者: qetu001212    时间: 2016-7-24 19:32
标题: this和super关键字
this代表的是对象,是地址值
super代表的是父类对象的引用,不是对象

作者: wanglv110    时间: 2016-7-24 20:18
没明白,super不是地址值吗
作者: 15114111253    时间: 2016-7-24 20:22
this表示当前对象,也就是当前类对象,super表示当前类的父类。  举例:你定义一个新的类:A,这个A继承了类B,也就是说B是A的父类。那么如果A中 有个方法:aa();B中也有个方法: aa();  那么在A 中用this.aa()调用的就是A中定义的方法,而super.aa()调用的就是A的父类B中定义的方法aa();
作者: qetu001212    时间: 2016-7-25 22:54
15114111253 发表于 2016-7-24 20:22
this表示当前对象,也就是当前类对象,super表示当前类的父类。  举例:你定义一个新的类:A,这个A继承了类 ...

不不不,没这么简单
class ThisAndSuper {
        public static void main(String[] args) {
                A a = new B();
        }
}
class A {
        int i = 0;
        public A(){
                this.play();
                System.out.println(i);
        }
        public void play(){
                System.out.println("我是A");
        }
}
class B extends A {
        int i = 10;
        public B(){
                this.play();
                System.out.println(i);
        }
        public void play(){
                System.out.println("我是B");
        }
}
class ThisAndSuper2 {
        public static void main(String[] args) {
                B b = new C();
        }
}
class A {
        int i = 0;
        public A(){
        }
        public void play(){
                System.out.println("我是A");
        }
}
class B extends A {
        int i = 10;
        public B(){
                super.play();
                System.out.println(i);
        }
        public void play(){
                System.out.println("我是B");
        }
}
class C extends B {
        int i = 20;
        public C(){
                super.play();
                System.out.println(i);
        }
        public void play(){
                System.out.println("我是C");
        }
}
你可以试试




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