黑马程序员技术交流社区

标题: 精益求精,你发现了毕老师代码中的小毛病吗? [打印本页]

作者: itheima_llt    时间: 2015-3-25 11:29
标题: 精益求精,你发现了毕老师代码中的小毛病吗?
本帖最后由 itheima_llt 于 2015-3-26 11:47 编辑

之前一直是只看视频,根本看不出任何问题。
现在我一边看书,一边看视频,一边敲代码,一边测试,发现毕老师写的代码有些地方也是有瑕疵的。
例如在day07AbstractTest中在定义父类的时候,他把父类的成员变量私有化了,这个是不可以的,私有之后子类无法继承该属性,如果在和数据可以连接的时候,将会产生严重的问题。
除此之外,还有一些小错误,我没有总结。
总的来说,毕老师的小错误是瑕不掩瑜的,还是超赞毕老师!{:3_67:}
所以,手上备一本java基础书看能取得更好的效果,把基础打得更扎实哦!

更正:“把父类的成员变量私有化了,这个是不可以的”具体指的是:“把在父类中属于所有子类都公有的属性私有化了,这个是不可以的”。

作者: DxxD    时间: 2015-3-25 11:46
赞一个。。。。
作者: zeizeizeiaaa    时间: 2015-3-25 12:05
父类的成员变量私有化之后子类无法继承该属性?
package com.itheima;

public class Test7 {
        private int a = 1;

        public static void main(String[] args) {
                Test7 b = new Test7();
                System.out.println(b.a);
        }

        class B extends Test7 {

        }
}
不是可以吗?
作者: One_M    时间: 2015-3-25 12:20
真没注意到~!!
作者: 四季    时间: 2015-3-25 12:21
你是0基础吗?看的哪本书?

作者: 朱闹闹    时间: 2015-3-25 12:44
访问的是成员方法,和成员变量没关系吧
作者: itheima_llt    时间: 2015-3-25 12:56
zeizeizeiaaa 发表于 2015-3-25 12:05
父类的成员变量私有化之后子类无法继承该属性?
package com.itheima;

私有:权限仅限于本类。

作者: itheima_llt    时间: 2015-3-25 12:58
四季 发表于 2015-3-25 12:21
你是0基础吗?看的哪本书?

Java与面向对象程序设计教程
这本书比较书面化,作为初学者的参考书,工具书,非常好用。
但是如果不看视频,仅仅想自学这本书,难度是很大的。
毕竟书面的东西,理解起来费劲一点!
作者: itheima_llt    时间: 2015-3-25 12:59
本帖最后由 itheima_llt 于 2015-3-25 13:03 编辑
朱闹闹 发表于 2015-3-25 12:44
访问的是成员方法,和成员变量没关系吧

是跟权限修饰符有关系!在具体的员工系统中,作为最大的父类Employee,如果它的属性值私有了,子类就无法继承。
子类无法继承,就必须重新定义,那么继承的意义呢??
所以,最大的父类,它的属性必须是可以被子类所继承的。
每一个子类都有属于他自己特有的属性,这时候必须私有化。

作者: zeizeizeiaaa    时间: 2015-3-25 13:15
itheima_llt 发表于 2015-3-25 12:56
私有:权限仅限于本类。

大哥,是访问权限好吗?其实是继承了的,只不过在其他类访问不了而已
作者: itheima_llt    时间: 2015-3-25 15:43
zeizeizeiaaa 发表于 2015-3-25 13:15
大哥,是访问权限好吗?其实是继承了的,只不过在其他类访问不了而已

这个问题有依据,根据官方的定义是这样的:
A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass. (http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)

所以是,根据官方的定义,private 的属性是不被继承的

而如果从内存角度上来看,这些 private 的属性也是存在于内存中的,只是不可见

但是根据 java 官方的定义,不可见就是不被继承
作者: jamesli    时间: 2015-3-25 18:11
其实,毕老师的小小缺点是打错别字,每节课都有,我总是比较纠结
作者: itheima_llt    时间: 2015-3-25 18:17
jamesli 发表于 2015-3-25 18:11
其实,毕老师的小小缺点是打错别字,每节课都有,我总是比较纠结

{:3_52:}这点我也纠结,只能寄希望于输入法更加智能了,不然大家都容易打错别字。
作者: luoyu1530    时间: 2015-3-25 22:43
。。。我还真不知道父类的成员变量不能私有化,封装的定义要求标准代码的成员变量必须私有化,对外只提供公共的访问方法。
毕老师这样做没错啊
作者: ITheima-Ssmnr    时间: 2015-3-25 23:01
毕姥爷,还是蛮吊的。
作者: itheima_llt    时间: 2015-3-25 23:12
luoyu1530 发表于 2015-3-25 22:43
。。。我还真不知道父类的成员变量不能私有化,封装的定义要求标准代码的成员变量必须私有化,对外只提供公 ...

子类特有就的私有化,大家都有的,父类就不私有化,仅仅提供给子类继承
作者: 小鹏_sJQBO    时间: 2015-3-25 23:15
今天刚看到这一集,看不出来问题,但是想访问name确实是访问不了,,,
作者: @G00DMaN    时间: 2015-3-26 00:17
支持支持支持~
作者: 朱令娟    时间: 2015-3-26 00:33
觉得基础很重要,要努力学习基础
作者: 陈捷旋    时间: 2015-3-26 00:35
错别字,每次我照抄一遍时老有
作者: fantacyleo    时间: 2015-3-26 01:23
不认可楼主”把父类的成员变量私有化了,这个是不可以的“的说法。首先,语法上是允许的。其次,虽然不能继承私有变量,但不意味着子类无法访问该变量。因为抽象类也可以定义非抽象方法。最后,我可以举出JDK源码中抽象父类定义了私有变量的例子:Number类、TimeZone类
作者: itheima_llt    时间: 2015-3-26 11:46
fantacyleo 发表于 2015-3-26 01:23
不认可楼主”把父类的成员变量私有化了,这个是不可以的“的说法。首先,语法上是允许的。其次,虽然不能继 ...

谢谢你这么认真的回帖!
首先,语法上确实是允许的。这点是毫无疑问的,但是定义的类应该符合现实生活的实际情况,就和“不能为了继承而继承”一样,也不能为了保护类的成员变量而全部私有,属于全体子类都有的不应当私有化。
其次,父类的私有成员变量确实是可以通过父类公有的方法而被子类所访问,这点也是毫无疑问的。
此外,你举的JDK源码那个例子,我还不了解。
最后,我把“父类的成员变量私有化了,这个是不可以的”说法更正为“把在父类中属于所有子类都公有的属性私有化了,这个是不可以的”。
谢谢!
作者: fantacyleo    时间: 2015-3-26 12:01
itheima_llt 发表于 2015-3-26 11:46
谢谢你这么认真的回帖!
首先,语法上确实是允许的。这点是毫无疑问的,但是定义的类应该符合现实生活的 ...

感谢回复。
对你的更正还是不认同。父类把各子类共有的属性私有化也具有现实意义:父类设计者或许不希望子类自定义某些共有属性(比如:身份证号码)的访问方式。而是通过非私有final方法为子类提供访问接口。
作者: itheima_llt    时间: 2015-3-26 12:03
fantacyleo 发表于 2015-3-26 12:01
感谢回复。
对你的更正还是不认同。父类把各子类共有的属性私有化也具有现实意义:父类设计者或许不希望 ...

让我琢磨琢磨!
作者: Vampire-he    时间: 2015-3-26 12:12
赞一个。。。。
作者: msyx9871453    时间: 2015-3-26 12:30
:handshake:handshake
作者: itheima_llt    时间: 2015-3-26 12:36
itheima_llt 发表于 2015-3-26 12:03
让我琢磨琢磨!

那么,请问是否所有的成员变量都给他私有化呢??
作者: xman20    时间: 2015-3-26 13:38
对楼主的刻苦学习精神赞一个
作者: 奔跑的猴子    时间: 2015-3-26 22:44
毕老师的视频中,经常是为了让可读性更强牺牲了一部分正确度,比如后面经常不处理异常。。。哈哈
作者: 嘛嘛咪阿    时间: 2015-3-27 18:07
我也在书上看到说:父类私有的(private)成员变量和成员方法不能被继承
作者: 菜鸟小A    时间: 2015-3-27 21:09
:handshake:handshake:handshake
作者: SunshineCui    时间: 2015-3-27 21:20

赞一个。。。。
作者: 亚希宝贝儿    时间: 2015-3-27 21:27
至今没发现~!
作者: 739262720    时间: 2015-3-27 21:41
大神还看基础视频?




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