当前位置:首页 » 密码管理 » class访问权限

class访问权限

发布时间: 2025-06-21 10:03:51

1. C++的类和C里面的struct有什么区别

C++中的class和C语言中的struct在使用上有显着的区别。首先,class中的成员默认访问权限是私有的,而struct中的成员默认访问权限是公有的。这意味着在class定义中,除非特别声明为公有或保护,否则成员变量和方法默认是私有的,只有class内部可以访问它们。而在struct中,除非特别声明为私有或保护,否则成员默认可以被外部访问。

其次,class和struct在继承方面的默认方式也有所不同。class的默认继承方式是私有继承,这意味着子类只能访问基类中公有的成员,而struct的默认继承方式是公有继承,这样子类可以访问基类中的所有成员,包括私有的。

此外,C++中的类还支持虚函数和虚函数表,这是C语言的struct所不具备的。虚函数和虚函数表使得类可以实现多态性,这是面向对象编程中一个非常重要的特性。虚函数表是一种特殊的数组,用于存储指向虚函数的指针,它使得通过基类指针或引用可以调用派生类的虚函数。

总之,虽然C++中的class和C语言中的struct都用于封装数据,但它们在默认访问权限、默认继承方式以及面向对象特性支持等方面存在差异。对于更深入的理解,建议查阅现代编译原理的相关资料。

2. java 的class 为什么不可以是protected访问权限

1. protected 访问控制符能被用于方法和成员变量。

2. 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。

3. 能被该类的子类所访问,子类可以和父类不在一个包中。

这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。
可访问性: public > protected > package >private
注意:
4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
但是位于与父类不同包中的一个子类,能够使用其父类中protected成员的途径只能是,使用子类(或者是子类的子类)的引用。子类和父类在同一个包中则没有这个限制。这样就保证了其他包中的类只能访问它们所继承的部分成员。
下面的例子可以说明上述几点:(特别注意第4点)
1 创建一个父类Bird.java,放在birdpack包中,父类中有一个protected int的成员变量nFeathers:
package birdpack; public class Bird { protected int nFeathers; }

2 创建Bird的一个子类Duck1.java,放在ckpack包中,这个程序说明在子类中直接使用父类的protected变量是可以的,父类的protected权限的成员变量可以被子类继承:
package ckpack; import birdpack.Bird; public class Duck1 extends Bird { public void setn(int ck1n) { nFeathers = ck1n; } }

3 创建Bird的一个子类Duck2.java,放在ckpack包中,这个程序说明在子类中通过子类的对象访问父类的protected成员是可以的:
package ckpack; import birdpack.Bird; public class Duck2 extends Bird { public void constructor(int newDuck2) { Duck2 d2 = new Duck2(); //在子类中通过子类的对象访问父类中的protected变量 d2.nFeathers = newDuck2; } }

4 创建Bird的一个子类Duck3.java,放在ckpack包中,这个程序说明在子类中使用父类的对象访问父类的protected成员反而是不行的:
package ckpack; import birdpack.Bird; public class Duck3 extends Bird { public void constructor(int newDuck3) { Bird b = new Bird(); //子类中用父类对象反而不能访问父类中的protected变量 //b.nFeathers = newDuck3; } }

5 创建Bird的一个子类Swan.java,放在ckpack包中,这个程序说明在子类中使用其他子类的对象访问父类的protected成员也是不行的:
package ckpack; import birdpack.Bird; public class Swan extends Bird { public void constructor(int swan) { Duck1 d1 = new Duck1(); //子类中用另外一个子类的对象也不能访问父类中的protected变量 //d1.nFeathers = swan; } }

-------------------------------------------------------------------------------------------------------------------------------
转载这篇文章,主要是为了说明,虽然在java中,父类中protected权限的成员变量可以被子类访问,但是还是有条件的,具体如下:
1.在子类中直接使用父类的protected变量是可以的,父类的protected权限的成员变量可以被子类继承
2.在子类中通过子类的对象访问父类的protected成员是可以的
3.在子类中使用父类的对象访问父类的protected成员反而是不行的
4.在子类中使用其他子类的对象访问父类的protected成员也是不行的

热点内容
电脑怎么卸载服务器管理 发布:2025-08-14 14:37:57 浏览:502
怎么看低配电脑的配置 发布:2025-08-14 14:24:16 浏览:397
安卓系统程序怎么调节成方块 发布:2025-08-14 14:23:22 浏览:663
遗传算法轴承 发布:2025-08-14 14:08:42 浏览:978
python调用restfulapi 发布:2025-08-14 13:58:07 浏览:851
怎么下载云服务器到电脑上 发布:2025-08-14 13:58:06 浏览:657
苹果搭配什么安卓手机 发布:2025-08-14 13:57:13 浏览:944
qq缓存的文件视频 发布:2025-08-14 13:50:21 浏览:386
python字符串notin 发布:2025-08-14 13:46:58 浏览:847
java数据库访问 发布:2025-08-14 13:46:22 浏览:994