类C存在两个x成员,分别从A和B继承。若c是class C的实例,可以用cA::x这种用法,但cx会因为歧义引起编译错误(注意这里的成员名称解析在访问权限之前,改变访问权限无法避免歧义)。注意对于类名C直接使用成员 *** 作符“”是错误的,另外这里若x是C的static成员对象,则可以使用C::x或cx引用这个成员。(另外,LZ的访问权限语法错误,类定义之后都漏了分号,会产生编译错误。Java/C#/D用惯了- -?)
测试代码:
class A
{
public:
int x;
};
class B
{
public:
int x;
};
class C: public A, public B
{
public:
} c; //这里顺便定义一个实例。
int main()
{
cA::x++; //++只是为了防止引起“无意义语句”的编译警告,逻辑上无意义,下同。
cB::x++;
cx++; //编译错误:歧义的成员名称x。
return 0;
}
====
首相,我想说一下:Java语言与C语言本身就是两种不同思维的语言。C语言是面向过程的语言,就是我们要干一件事情,那么一步一步逐次来做,直到完成,其中可能就要调用一些函数,被调用的函数也是过程执行的。但是Java程序的开发思路是面向对象的,它是有一个类,这个类有属性,有方法。我们要干一件事的时候,就通过该类所定义的或者说是具体化的对象(Object)来调用自己的方法来完成,这里所说的方法,你也可以理解为是一个函数(类似于C语言中的),但是只不过这个方法现在是属于这个类的,属于这个对象的,是有“主人”的,只有通过它的“主人”才能调用它。而面向对象的Java有一个特点就是继承,当某一个类A继承了类B那么类A就可以使用类B的方法了,因为A继承了B,同样A的对象也可以使用B的方法了。OK?明白了么?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)