一个在C#中的语法,让我费解好几天的问题,请大家指点一下吧,急啊!救命啊?
using System;
class A
{
private int age=20;
public static void Main(string[]args)
{
B b=new B();
Console.WriteLine(b.age);//不明白,此时编译也不提示错误,为什会输出20呢?应当输出子类中自己已的域age的值30才对啊,还有就算难道私有成员在c#中也能继承?
}
}
class B:A
{
private int age=30;
}
------解决方案--------------------因为你的main方法在A内部,所以可以访问A的私有变量。而为什么不输出B的私有变量,那就要你自己考虑了,你不能也不应该知道一个类的私有变量是什么。你所知道的仅仅是B继承了A而已,对于B的私有成员一无所知,那么你在A里当然也不能访问B的私有变量age了。
如果你说的是没错的话,那倒是Java里的语法不合理了,既然A内部能访问A的私有变量,而B继承了A,最后A却不能访问B里面属于A私有的那部分?
试试下面这段代码结果怎么样?
class A
{
private int age=100;
public static void main(String[]args)
{
B b = new B();
System.out.println(b.age);//报错
A a = new B();
System.out.println(a.age);//这里就不报错?
}
}
class B extends A
{
}
------解决方案--------------------main是static的,不能访问非static的int,把那句换成private static int age=20;