1、java
java中表示权限的关键字分别为public,protected,private。没有friendly这个,什么都不写的话也是一种不同的权限表示。
class Mall
{
public String mallName;
}
class SuperMarket extends Mall
{
public void Show(){
System.out.println("THIS IS A SUPERMAKET:");
System.out.println(mallName);
}
}
public class helloworld
{
public static void main(String args[])
{
SuperMarket superMarket = new SuperMarket();
superMarket.mallName = "Gao";
superMarket.Show();
}
}
简单来讲:
public的成员可以被本类,本包,子类,子类,外部包访问
protected的成员可以被本类,本包,子类访问,但是不能被外部包访问
default的成员可以被本类,本包访问
private只可以被本类访问
java的文件可以由很多个顶级类,作用位置只可能有两种,要么是所有位置(public),要么是本包中(default)。但是,一个文件只能有一个同名的有public修饰的外部类。其他的外部类由default修饰。
外部类内部可以包含内部类,内部类可以采用四种修饰方式,内部类的相关说明在java专题下。
3、C#
C#中的访问控制机制的修饰符有public,private ,protected,internal
其中,可以修饰类的只有protected和internal。无论是类还是类的成员,如果不写修饰符默认为internal
在上图中可以看到,private只能在类的内部访问,protected只能在本类和子类中访问,internal可以被本程序集内访问,public可以在任何地方访问。protected internal是protected or internal的意思。
对于类来说,public表示任何地方都可以访问到,internal表示只有在相同程序集内才能访问到。这里所谓的相同程序集是指不同的project下的程序,而非是不同的命名空间。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("hello,world");
OtherNameSpace.A a = new OtherNameSpace.A();//在同一个程序集不同命名空间internal也可以访问
ConsoleApplication2.B b = new ConsoleApplication2.B();//B所在的程序是由另一个项目产生的,class B必须是public才能访问,也就是说需要在VS中新建程序后添加引用。
Console.ReadLine();
}
}
}
namespace OtherNameSpace
{
internal class A
{
public A()
{
Console.WriteLine("here is A");
}
}
}
3、C++
C++的访问控制符有三个,private,protected,public
private只能由本类内进行访问
protected只能由本类和子类进行访问
public可以在任何地方进行访问
在继承的时候,private属性不能被继承
如果使用public继承,那么,成员的属性不发生改变
如果使用protected继承,那么,父类的public和protected到子类中都变成了protected
如果使用private继承,那么,父类的public和protected到子类中都变成了private
相比之下,java和c#都只存在public的继承。
除此之外,c++中还有friend关键字,可以用于定义友元函数和友元类。友元函数是指不包含在任何类中可以访问类中的任何成员。友元类破坏了类的封装性和隐藏性。