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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史鹏飞 中级黑马   /  2013-4-25 10:55  /  1627 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


不是说private才是只能在类内部使用吗?为什么用protected也不访问呢?public,protected,private,internal到底是什么权限?

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

9 个回复

倒序浏览
不知道你到底出现什么情况了。
但我这边运行是没问题的。 protected 确实可以访问的。
下面权限图:( 1 代表可以访问 )
                public       protected    default   private
同一个类中       1           1             1         1
同一个包中       1           1             1
子类             1           1
不同包中         1
回复 使用道具 举报
殇_心。 发表于 2013-4-25 11:07
不知道你到底出现什么情况了。
但我这边运行是没问题的。 protected 确实可以访问的。
下面权限图:( 1 代 ...


提示它受保护级别限制,什么原因呢?
回复 使用道具 举报
建议楼主下次把代码放在代码框里,好复制,不然重打代码好麻烦呢,

public 共有类,表示不受限制对该类的访问
protected 保护类,表示只能从所在类和所在类派的子类进行访问
internal 内部类(默认值),访问仅限与当前程序集
回复 使用道具 举报
史鹏飞 发表于 2013-4-25 11:19
提示它受保护级别限制,什么原因呢?

你的是c#?   这个我不知道了。。  java中是可以的。
回复 使用道具 举报
1.private只能在类内部使用是对的,没错。
2.protected修饰的只能在本类和子类中访问也是对的,没错。

你写的子类中的num会报警告:Zi.num”隐藏了继承的成员“Fu.num”。如果是有意隐藏,请使用关键字new。

至于Main方法中想要访问num是不允许的,
必须通过类的实例.字段,而且字段必须是public修饰的,否则无法访问;
或者类名.字段名,但是类不是是static修饰的。
public在任何地方可以被访问。
protected在本类和子类中可以被访问。
private只能在本类中访问。
internal本项目中被访问。
回复 使用道具 举报
我没装visual studio 2005,运行不了,protected 只能被子类访问,
而protected int num=4;并没有被继承,
你在class Program中是访问不了的。
把代码改成这样试试

class Fu
{
        protected  int num=5;
}
class Zi:Fu
{
        int num=4;
}
class Program
{
        static void Main(string[] args)
        {
                Zi z=new Zi();
                z.num=5;
                Concole.ReadKey();
        }
}
回复 使用道具 举报
清楚的知道了protected的范围,谢谢!
回复 使用道具 举报
public是公有的,任何地方都能访问到,private是私有的,只能在本类中访问,protected只能在本类和子类中访问,intemal只能在本项目中访问
Zi z= new Zi();
            z.num = 5;//这里出错是因为protected只能在本类和子类中访问,这里没有访问权限
            
        }
        class Fu
        {
          protected int num = 5;
        }
        class Zi
        {
          protected  int num = 4;//这里按你写的不会出错,应该是你的问题
        }

可以将protected改为public
如下:
Zi z= new Zi();
            z.num = 5;
            Console.ReadKey();
        }
        class Fu
        {
         public int num = 5;
        }
        class Zi
        {
         public  int num = 4;
        }
回复 使用道具 举报
public 可以在任何地方被访问,intemal 只能在本项目中被访问,private 只能在本类中被访问,protected 只能在本类和子类中被引用,所以在父类和子类中用protected修饰同名的变量是不行的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马