黑马程序员技术交流社区

标题: 关于this和super的一些小问题 [打印本页]

作者: HaiMing    时间: 2016-3-20 00:06
标题: 关于this和super的一些小问题
本帖最后由 HaiMing 于 2016-3-20 11:35 编辑

class Fu{
        private String name;
        private int age;
        public Fu(String name,int age ){
                this.name=name;
                this.age=age;
        }
        public void setName(String name) {
                this.name=name;
        }
        public void setAge( int age) {
                this.age=age;
        }
        public String getName() {
                return name;
        }
        public int getAge() {
                return age;
        }
        public void show() {
                System.out.println (name+age);
        }
}        
class Son {
        String addr;
        public Son () {
        }
        public Son(String name,int age ) {
                super(name,age);
        }
}
class Demo{
        public static void main(String[] args){
                Son  s =new Son ();
               
        }
}


作者: 懒癌患者    时间: 2016-3-20 00:19
。。。。。。。。。到底想表达啥
作者: lijiy09    时间: 2016-3-20 10:25
是要说继承的问题吗?
作者: 陈文广    时间: 2016-3-20 10:50
this代表本类对象的引用,或者可以叫做当前对象的引用.谁调用它,它就代表谁.
super代表本类对象的父类的引用.用到super就必然有继承关系.

作者: HaiMing    时间: 2016-3-20 11:37
陈文广 发表于 2016-3-20 10:50
this代表本类对象的引用,或者可以叫做当前对象的引用.谁调用它,它就代表谁.
super代表本类对象的父类的引用 ...

就是上面的代码,如果父类没有的成员变量值  只有子类有 要怎样通过方法调用出来
作者: HaiMing    时间: 2016-3-20 11:40
陈文广 发表于 2016-3-20 10:50
this代表本类对象的引用,或者可以叫做当前对象的引用.谁调用它,它就代表谁.
super代表本类对象的父类的引用 ...

还有就是 父类没有无参构造  只有有参构造的话,在测试类中,子类能调用父类的午餐构造吗?


作者: 陈文广    时间: 2016-3-20 11:49
本帖最后由 陈文广 于 2016-3-20 12:01 编辑
HaiMing 发表于 2016-3-20 11:40
还有就是 父类没有无参构造  只有有参构造的话,在测试类中,子类能调用父类的午餐构造吗?

...

父类如果没有无参构造,想要在测试类中创建子类对象成功,有两种方式1.子类无参构造方法显示的调用父类的有参构造方法super(数据类型  成员属性,  数据类型   成员属性  .....)把值赋值给父类的成员属性这样也这可以把父类的初始化完成  .
2.通过子类的无参构造方法显示的调用本类的有参构造方法this(数据类型  成员属性,  数据类型   成员属性 ......file:///C:\Users\ADMINI~1\AppData\Local\Temp\SGPicFaceTpBq\4412\05BCDE46.giffile:///C:\Users\ADMINI~1\AppData\Local\Temp\SGPicFaceTpBq\4412\05BCDE46.gif);间接的访问父类的有参构造方法
然后子类的有参构造方法要求写成这样 public Son(数据类型  成员属性,  数据类型   成员属性 ..) {
    super(数据类型  成员属性,  数据类型   成员属性.....);
}



作者: Andyhuai    时间: 2016-3-20 12:03
不错,学习了!!
作者: HaiMing    时间: 2016-3-20 12:07
陈文广 发表于 2016-3-20 11:49
父类如果没有无参构造,想要在测试类中创建子类对象成功,有两种方式1.子类无参构造方法显示的调用父类的有 ...

谢谢  我们的 技术班长 ..... 给你 100个技术分
作者: HaiMing    时间: 2016-3-20 12:09
<<:左移        左边最高位丢弃,右边补齐0(正负数都适合)
        *  >>:右移        最高位是0,左边补齐0;最高为是1,左边补齐1(正数适合,负数不适合)
        *  >>>:无符号右移 无论最高位是0还是1,左边补齐0(正数适合,负数不适合,负数右移会变成正数)


这些完全看不懂啊



按位取反  ~  是什么意思?(  符号位要不要取反)

作者: 陈文广    时间: 2016-3-20 12:09
另请参阅:
父类没有无参构造方法,子类怎么办?
        * super解决:用super(....)显式调用父类的有参构造,如:super(name,age);->super("zs",30);
        * this解决:通过this调用本类的有参构造,然后在本类的有参构造里,又调用了父类的有参构造,相当于间接调用父类的有参构造.
* B:注意事项
        * super(…)或者this(….)必须出现在构造方法的第一条语句上,只能出现其一


总之,子类对象初始化的时候,必须访问父类的构造方法,但注意不是一定要访问父类的无参构造,访问父类的有参构造也是可以的.只是在默认情况下 系统会走父类的无参构造方法,如果父类只有有参构造,那么我们就只能访问父类的有参构造了.
这样我们就必须在子类的构造方法中明确指出调用父类的有参构造,这样就不会走父类的无参构造了

作者: HaiMing    时间: 2016-3-20 12:31
this解决:通过this调用本类的有参构造,然后在本类的有参构造里,又调用了父类的有参构造,相当于间接调用父类的有参构造.

*你这句话的意思  我可不可以这样理解.......
class Son {
        public Son() {
                this.        name=name;
                this.age=age;            //      this    是写在这个子类的无参构造里面  还是写在另外定义的一个方法里面呢
        }
        public Son(Stirng name,int age) {
                super(name,age);
        }
        public void show2(Stirng name,int age) {
                this.name=name;
                this.age=age;                 //还是应该这样写呢?
        }
}




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