黑马程序员技术交流社区
标题:
新手求指教 !!!
[打印本页]
作者:
王海旺
时间:
2013-7-14 19:51
标题:
新手求指教 !!!
本帖最后由 杨兴庭 于 2013-7-15 12:11 编辑
为什么paintComponent方法是protected的?如果在子类中将它改为public或private,会发生什么?
作者:
iBadboy
时间:
2013-7-14 20:34
我觉得应该先了解它们的区别,
public
公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问
private
私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问
protected
保护,加上这个修饰的类或属性,只能在类和同包访问,别的包不能访问
一般声明为private的可以理解为“只读”属性,即这个对象是被封装起来的,一般人看不到或者只能看,不能修改;
而一般声明为public的就是所谓的“公共”属性,即任何一个使用者都可以使用。
另一方面,也保证了整个类的安全,保证类在逻辑上的正确性,防止被其他的外类非继承函数访问改变数据成员
作者:
云游天下
时间:
2013-7-14 21:41
要给“别人”使用的变量和函数就用public
只给自己使用的变量和函数就用private
protected。。。这个只能说概念了。。。就是想要允许他的子类直接访问,就用protected。
其实,你只需要记住,在设计过程中,先把所有的设置为private。然后再来慢慢分析是否需要修改为另外两种。例如你写一个类用来在屏幕上画一个矩形,那肯定要有一个draw函数是public的,要不然别人或者类之外的代码没法用你这个类来画图,对吧?但是呢,你的draw函数,为了多方面的原因,并不是在draw里面把所有图形都画完了,你可能想要写一个画边框draw_frame和一个填充这个框架的函数叫做fill。然后draw函数就掉用这两个函数来实现画图的功能。那么假设你又想设计一个类专门画一种特殊边框的矩形,那你是不是就要派生一个类出来呢?于是,这个派生的类里面,你想要调用原来那个父类的fill函数来填充,对吧?因为你这个派生类只是边框的画法不同,填充方法还是相同的,没必要重新写一下fill的代码噻,所以你就把fill改为protected,这样子类也可以直接调用了。
简单的说,就是先把所有的设计为private,然后程序报错了,说不能访问,那么你就把他改成protected(如果提示不能访问的地方是在派生类里面)或者public(如果提示不能访问的地方是在类的外面)
多试几次,你就知道,其实概念真的已经把他们的区别说完整了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2