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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海旺 中级黑马   /  2013-7-14 19:51  /  907 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-15 12:11 编辑

为什么paintComponent方法是protected的?如果在子类中将它改为public或private,会发生什么?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3

查看全部评分

2 个回复

倒序浏览
我觉得应该先了解它们的区别,
public
公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问
private
私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问
protected
保护,加上这个修饰的类或属性,只能在类和同包访问,别的包不能访问

一般声明为private的可以理解为“只读”属性,即这个对象是被封装起来的,一般人看不到或者只能看,不能修改;
而一般声明为public的就是所谓的“公共”属性,即任何一个使用者都可以使用。
另一方面,也保证了整个类的安全,保证类在逻辑上的正确性,防止被其他的外类非继承函数访问改变数据成员

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
要给“别人”使用的变量和函数就用public
只给自己使用的变量和函数就用private
protected。。。这个只能说概念了。。。就是想要允许他的子类直接访问,就用protected。


其实,你只需要记住,在设计过程中,先把所有的设置为private。然后再来慢慢分析是否需要修改为另外两种。例如你写一个类用来在屏幕上画一个矩形,那肯定要有一个draw函数是public的,要不然别人或者类之外的代码没法用你这个类来画图,对吧?但是呢,你的draw函数,为了多方面的原因,并不是在draw里面把所有图形都画完了,你可能想要写一个画边框draw_frame和一个填充这个框架的函数叫做fill。然后draw函数就掉用这两个函数来实现画图的功能。那么假设你又想设计一个类专门画一种特殊边框的矩形,那你是不是就要派生一个类出来呢?于是,这个派生的类里面,你想要调用原来那个父类的fill函数来填充,对吧?因为你这个派生类只是边框的画法不同,填充方法还是相同的,没必要重新写一下fill的代码噻,所以你就把fill改为protected,这样子类也可以直接调用了。
简单的说,就是先把所有的设计为private,然后程序报错了,说不能访问,那么你就把他改成protected(如果提示不能访问的地方是在派生类里面)或者public(如果提示不能访问的地方是在类的外面)
多试几次,你就知道,其实概念真的已经把他们的区别说完整了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马