-
访问级别的名称和个数:在C++中,有三个访问级别关键字:public、protected和private。而在Java中,有四个访问级别关键字:public、protected、private和默认(没有关键字修饰)。
-
默认访问级别不同:在C++中,如果没有提供任何访问级别修饰符,则成员(包括类、变量、函数等)的默认访问级别为"private"。而在Java中,如果没有提供任何访问级别修饰符,则成员的默认访问级别为包级私有(package-private),即同一个包内可以访问。
-
访问级别的可见范围不同:在C++中,public成员可以被任何其他类或对象直接访问;protected成员可以被派生类及其同一包内的其他类或对象访问;private成员只能被定义该成员的类内部访问。而在Java中,public成员可以被任何类或对象直接访问;protected成员可以被派生类及其同一包内的其他类或对象访问;private成员只能被定义该成员的类内部访问;默认(包级私有)成员只能被同一包内的其他类或对象访问。
-
访问控制符的继承性:在C++中,派生类可以继承基类的所有成员(无论其访问级别如何),并可以通过派生类对象直接访问基类的公有成员。而在Java中,派生类只能继承基类的protected和public成员,private成员对派生类不可见,需要通过基类提供的公有方法间接访问。
-
强调,JAVA中的protected只对自己的子类生效,如果在main函数(外部类)中访问一个声明的类(内部类)的clone()方法,会报错。因为main与声明类的父类对象不是同一个对象,即使他们都继承于object。