C/C++ C# JAVA比教学------访问控制机制

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关键字,可以用于定义友元函数和友元类。友元函数是指不包含在任何类中可以访问类中的任何成员。友元类破坏了类的封装性和隐藏性。

时间: 2024-10-11 21:34:16

C/C++ C# JAVA比教学------访问控制机制的相关文章

详解Java中的访问控制修饰符(public, protected, default, private)

Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  

Java中的反射机制

Java反射的概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制 Java反射机制主要提供下面几种用途: 1.在运行时判断任意一个对象所属的类 2.在运行时构造任意一个类的对象 3.在运行时判断任意一个类所具有的成员变量和方法 4.在运行时调用任意一个对象的方法 首先看一个简单的例子,通过这个例子来理解Java的反射机制是如何工作的 i

java的动态代理机制详解

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于 Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是 java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface).另一个则是 Proxy(Cla

java单双派机制理解

引言:Java是一个支持双分派的单分派语言 知道java是支持后期动态绑定,也知道访问者模式,但是两者之间的关系,还真不知道,况且在这之间还有一个静态绑定. 1.动态绑定 class Father { public void method(){ System.out.println("This is Father's method"); } } class Son1 extends Father{ public void method(){ System.out.println(&qu

Java的垃圾回收机制笔记

Java的垃圾回收机制笔记 java垃圾回收的意义 确保不再被引用的对象的内存空间被回收. 确保被引用的对象的内存不被错误回收. 再分配内存. java垃圾回收的常用方法 引用计数收集器 堆中的每个对象(不是对象的引用)都有一个引用计数.当一个对象被创建时,给该对象分配一个变量,该变量计数设置设置为1.当任何其他变量被赋值为这个对象的引用,计数加1(a=b,则b引用的对象计数+1),但当一个对象的某个引用超过生命周期或者被设置为一个新值的时候,引用的计数减1(a=c,则a不再指向b指向的对象,而

java中利用反射机制绕开编译器对泛型的类型限制

首先看下面这个例子 public static void main(String[] args) { ArrayList<Integer> al1 = new ArrayList<Integer>(); al1.add(1); ArrayList<String> al2 = new ArrayList<String>(); al2.add("hello"); //int型链表和string型链表,结果为true System.out.pr

java的垃圾回收机制的特点

浅谈java的垃圾回收机制的特点: 1.垃圾回收机制的目标是回收无用对象的内存空间(记住:不是对象),这些内存空间是JVM堆内存的内存空间.垃圾回收只回收内存资源,对于那些物理资源,如数据库连接,Socket,I/O流等资源无能无能为力,我们要自己关闭回收. 2.为了加快垃圾回收机制回收那些无用对象所占的内存空间,我们可以讲对象的引用变量置于null(记住:置于null后,垃圾回收机制不会立即执行的). 3.垃圾回收机制的潜在缺点它的开销会影响性能.Java虚拟机必须跟踪程序中有用的对象才可以确

全面解析Java的垃圾回收机制

转自:http://www.cnblogs.com/laoyangHJ/archive/2011/08/17/JavaGC.html —————————————————————————————————— Java的堆是一个运行时数据区,类的实例(对象)从中分配空间.Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new.newarray.anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放.一般来说,堆的是由垃圾回收来

Java语言的运行机制

计算机语言分为编译型和解释性两种类型. 编译型: ( C/C++.Pascal/Object Pascal(Delphi) ) 编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高. 解释性: ( Java.JavaScript.VBScript.Perl.Python.Ruby.MATLAB ) 解释性语言在运