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

编程范式对决:C、C++与C#深度解析 本文对比分析了C、C++和C#三大编程语言的核心差异。从编程范式看,C是面向过程,C++支持多范式,C#为纯面向对象。在运行时特性上,C#依赖CLR提供自动内存管理,而C/C++需手动控制。内存管理机制差异显著:C手动管理,C++使用智能指针,C#采用垃圾回收。语法层面,C#提供丰富的现代特性如LINQ和异步编程,C++则以模板元编程见长。开发工具链方面,C/C++依赖传统编译器,C#拥有完善的IDE生态。 阅读详情

、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修饰。
main函数必须使用public static修饰。

外部类内部可以包含内部类,内部类可以采用四种修饰方式,内部类的相关说明在java专题下。
最后当然是继承的问题:
private当然不可继承也不可见。
其他继承后权限不变。子类可以重写父类的方法,但是不能降低(这里指更严格)其权限。
如果重写后,父类方法被隐藏,但是可以通过super来调用。

public class TestClass {
    public static void main(String[] args){
        ChildClass a = new ChildClass();
        a.SAY();
        a.SAYFATHER();
        FatherClass b =(FatherClass)a;
        b.SAY();

    }

}

class ChildClass extends FatherClass{
    /*
     //下面两种写法是错误的
    private void SAY(){
        System.out.println("this is PRIVATE in Son");
    }

    protected void SAY(){
        System.out.println("this is PROTECTED in Son");
    }
    */
    public void SAY(){
        System.out.println("this is PUBLIC in Son");
    }
    public void SAYFATHER(){
        super.SAY();
    }
}

如果子类没有重写父类的方法的话,那么权限机制和父类是一样的。除了修饰符不变外,相对关系也必须按照父类来的。这样做的理由很简单,里氏替换原则。确保了任何指向父类对象的引用能用的场合,指向子类对象的引用也可以使用。当然这是在不考虑你重写的条件下。我们在OO设计思想中提过,任何子类的方法“应该”比父类的输入要求更严格,返回要求更宽松,保证子类对象可以替换父类对象。当然,这个不是必须的。

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

C++、Java和C#语言在处理“虚拟私有方法”上的差异 运行时动态绑定被调过程的“虚拟方法”(virtual method)机制是实现多态的关键技术。C++、Java和C#(按出生年月排列,上同,下同)作为三种主流的支持对面向对象的程序设计语言,自然都提供了这种动态的方法绑定机制,在这个问题上三兄弟没有谁是含糊的。但当“虚拟”(virtual)和“私有”(private)碰在一起时,这几种语言在处理上却有所不同,本文的故事就是从一段小程序说起的:我 阅读详情

相关推荐

C++继承机制深度解析:从访问控制到虚函数与多态实践

面向对象编程中的继承机制是实现代码复用和构建层次化软件系统的核心概念。其原理在于允许派生类获取基类的成员,并通过访问控制(public、protected、private)来管理成员的可见性,从而支持‘是一个’(is-a)的关系建模。这一机制的技术价值在于它奠定了运行时多态的基础,使得程序能够通过统一的接口处理不同的派生类对象,极大地提升了代码的扩展性和可维护性。在应用场景上,继承广泛用于GUI框架、游戏实体系统、插件架构等需要动态行为绑定的领域。本文聚焦于C++中的继承实现,深入探讨了虚函数表(vtabl

375

java 和 C# 的访问权限

java 和 C# 的访问权限 【Java中访问权限】有四个: 作用域_____当前类____同一package___子孙类____其他package public(类或成员)√√√√ protected(成员)√√√× 缺省(类或成员)√√×× private(成员)√××× 【注意】:1.一个java文件可以包含多个类,但是有且必须一个类为public且类名要与文件名一样,其他的类为缺...

weixin_30823683的博客 170

医院管理系统:C/S架构与C#语言的综合应用

医院管理系统作为医疗机构日常运营的核心,其功能的全面性和可靠性直接关系到医疗服务的效率和质量。本章节将详细介绍医院管理系统中的关键功能模块,以帮助读者深入了解系统的操作流程、数据管理、财务结算、权限控制等多个方面。.NET框架是一个用于构建、部署和运行Windows应用程序和Web服务的软件框架。它由一个广泛的类库组成,称为框架类库(FCL),以及一个运行时环境,称为公共语言运行时(CLR)。CLR是.NET应用程序的执行引擎,负责程序的加载、编译和执行。

weixin_31569663的博客 827

JAVA基础编程——包和访问控制权限

在C/C++中,是通过.h文件和.cpp文件进行功能区分的,通常一个.cpp文件会对应一个.h文件,而如果不同模块之间需要进行交互操作,或者需要进行接口调用的话,就需要包含对应的.h文件,以表示当前的模块包含了对应模块,因此就可以调用对应模块的接口了。而JAVA中只存在一种.java文件,因此便通过包和包管理实现了这种功能。 在JAVA中,可以将大型的类进行独立,不同功能分别保存到不同的包中,然后将所有包中的程序文件进行编译执行,这样产生的代码便会更易于维护。 包 在JAVA中,源程序文件是.java

止步听风的博客 900

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

通过Coze平台实现将Excel文档批量导入数据库的全流程,包括B站现有参考教程全方位解读、自己实操的一些BUG解决过程,以及一些疑难问题的探索。

bailichen800的博客 8825

别再为GEE注册发愁了!用谷歌Cloud Project,5分钟搞定谷歌地球引擎账户(保姆级图文)

本文提供2024最新版谷歌地球引擎(GEE)账户注册的保姆级教程,通过谷歌Cloud Project快速完成注册,5分钟极速通关。详细解析注册前的准备、分步图解流程、常见误区及解决方案,帮助用户避开90%的注册陷阱,直达GEE核心功能区。

weixin_42557830的博客 200

JAVA基础 访问控制

今天我们来聊一聊访问控制 什么是访问控制呢? 访问控制就是JAVA中控制类外的程序,能够访问类中的那些的成员。 有些人可能会问了,类的成员变量不是都能在外部访问吗? 其实不是的。 这和现实中一样。我们有很多属性也是不能对外公开的,比如说你的银行卡的卡号和密码,或者说银行存折的余额,女孩的体重,女孩的年龄这些都是不能被访问的。 JAVA中也是一样的,我们的类中的成员不应该被随便就被外界轻易的访问到,甚至被外界破坏掉。 JAVA中使用类封装成员,并不是仅仅为了,把成员集中在一起保存这么简单,它更重要的目的是

淡若清风 462

DDPG算法实战:用Python一步步实现深度强化学习中的连续动作控制

本文详细介绍了DDPG算法在深度强化学习中的连续动作控制应用,通过Python和PyTorch实现从零构建智能体。内容涵盖环境搭建、网络架构设计、经验回放、OU噪声实现及训练流程优化,帮助开发者掌握DDPG在机械臂控制等场景的核心技术。

weixin_30335575的博客 416

C++ VS Java 系列 —— 访问控制

访问控制   C++和Java均具有封装概念,所以也有面向对象所具有的封装中的访问控制,这些访问控制在C++中只区分类内、类外、父子类,而在Java中进行了合理的保留和舍弃,将区分扩展到了包级,类似于C++中的命名空间。 一、针对类的成员访问控制符   C++:private(class默认)、protected、public(struct默认)   Java:priv...

a6217815的博客 234

Comsol超声空化气泡仿真入门:从零搭建模型到网格划分的完整流程

本文详细介绍了使用Comsol进行超声空化气泡仿真的完整流程,从物理基础理解到模型搭建、网格划分及求解器设置。通过具体步骤和示例代码,帮助初学者和工程师快速掌握这一关键技术,应用于医疗设备和工业清洗等领域。

weixin_29289821的博客 165

NetApp 7-mode初始化详解(原AGGR重建)及注意事项

没想到有生之年还能再写个7-mode的文章,上次接触可能已将近十年,本次恰巧碰到这个机会,边学习边整理,整整一天时间,碰到了不少坑,作为记录。

RaySun的技术Blog 2752

C#访问修饰符

public(公共的),internal(内部的),protected(受保护的),private(私有的)声明的方法和属性,可以被外部调用。同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员,任何地方都可以访问, 但是需要引用命名空间。声明的方法和属性,只能在本类中被调用,外部看不到。只有同一class或struct中的代码可以访问该类型或成员。同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以,默认的程序集中可以访问类的内部和类的父类及子类皆可以访问,可以在

Z_W_H_的博客 612

亚马逊跨境电商选品数据分析:Python爬虫实战指南

本文将带领大家构建一套完整的亚马逊选品数据采集与分析系统,使用最新的Python技术栈,从零开始爬取亚马逊商品数据,并进行深度分析。

2201_76125261的博客 299

SOpt项目面向对象编程精髓:Java、C和C++对比分析

SOpt项目是一个包含多种编程语言代码示例的开源项目,其中面向对象编程(OOP)的实现尤为丰富。本文将深入对比分析SOpt项目中Java、C#和C++三种语言在面向对象编程方面的核心特性与实现方式,帮助开发者理解不同语言的OOP精髓。 ## 面向对象编程核心概念解析 📚 面向对象编程的四大核心特性是封装、继承、多态和抽象。这些概念在SOpt项目的不同语言实现中有着各自独特的表达方式。 ##

gitblog_00813的博客 702

OpenClaw人人养虾:配置通义千问(Qwen)

通义千问(Qwen)是阿里云推出的大语言模型系列。OpenClaw 支持通过 Qwen Portal 插件实现 OAuth 免费额度认证,每日可免费使用 2000 次请求,无需绑定支付方式。

王国平的博客 1257

华为OD机试 - 机器人活动区域(Java 双机位C卷 200分)

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1

学Java,找哪吒 916

Private访问控制:从入门到实战的深度剖析

本文系统探讨了private访问控制在不同编程语言中的应用与实现。首先介绍了private的基本概念及其在数据安全、封装和代码维护性方面的重要作用。随后详细分析了private在Java、C++和Python中的具体实现方式:Java通过private关键字严格限制访问权限;C++除private外还提供友元机制实现特殊访问;Python则通过命名约定(双下划线前缀)实现伪私有访问控制。文章还探讨了突破private限制的技术(如Java反射、C++友元等),并强调此类操作需谨慎使用。最后提出实际项目中应遵

大雨淅淅的博客 1143

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# 和 Java 的比较

网上的一篇《C# 和 Java 的比较》(或者叫《Java 和 C# 的比较》)写的挺不错的,今天忽然搜索到。自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就心血来潮在原作者的每一条之后斗胆都写了些文字。就当是给自己再加深一遍印象吧。 【非常抱歉,由于网上此文章已经被转载多次,所以真的找不到原出处了,所以没法贴出作者原贴的连接】 开始吧... 2007年

wfskiki的专栏 537

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java、C#、C++技术选型实战指南:从特性对比到场景决策

在软件开发领域,技术选型是项目成功的关键基础。理解编程语言的核心特性、设计哲学及其底层原理,是做出明智决策的第一步。从内存管理机制到运行时环境,不同的技术选择直接影响着软件的性能、开发效率和可维护性。在追求高并发、低延迟或快速迭代等不同技术价值时,开发者需要权衡生态成熟度、团队技能与长期成本。无论是构建企业级微服务、跨平台桌面应用,还是开发高性能游戏服务器,选择合适的技术栈都能有效规避潜在风险。本文聚焦于Java、C#和C++这三门主流语言的深度对比,结合微服务、游戏开发等具体应用场景,提供一套清晰的选型决

weixin_42556197的博客 309

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

面试问题分析:为什么Java能实现反射机制,其他语言不行?

在聊为什么Java能实现反射之前,得先说说反射是什么。简单来说,反射(Reflection)是一种运行时动态获取和操作程序结构的能力。在Java里,通过反射,你可以拿到一个类的完整信息(比如类名、方法、字段),甚至能动态创建对象、调用方法、修改属性,而这些操作都不需要提前知道具体的类名或代码逻辑。比如,Java的包提供了ClassMethodFieldClass<?这种“运行时探秘”的能力很强大,但为什么Java能做到,而其他语言似乎没这么“灵活”呢?

IT枫斗者的博客 525

P25、26 类的声明、访问级别、继承、成员访问控制

1 类声明的全貌 1.1 C#类声明的位置 类声明在名称空间里 namespace HelloClass { class Program { } } 类声明在显式的名称空间之外 实际上是声明在了全局名称空间里面,这是把类声明在名称空间的一种特殊情况。平时写软件项目中没人会这么写,也不推荐这么写 namespace HelloClass { } class Program { } 声明在类体里面(成员类) 成员类在学习时不常见,但实际项目中很常用

weixin_47715668的博客 270

Java基础以及与C++的一些对比

这两天回忆一些Java基础,感觉自己很多地方都不是很牢固,也花费在不少时间和不少流量在手机上查资料。 还是写下来这些东西以免再忘记。 同时还是要记住多动手,编程最重要的就是动手敲啊,有想法有疑问就要自己去实现去验证。 1. 访问控制      Java的默认访问权限(包访问权限)跟C++中的友元很像其实,都具有一定的特殊性。   同一个包中的类是可以任意访问其他类的非私有成员的,而如果...

weixin_30505043的博客 69

C++批判的批判

1,typedef不必要?a,typedef提供了一层间接,面向对象语言中,接口掩盖了运行时不同具体类型间的差别,而typedef掩盖了编译时不同类型间的差别,却又不丧失类型安全性b,一般语言只能返回“值”,而typedef提供了返回“类型”的能力,这是模板元编程不可或缺的机制,除非模板元编程眼下也是不必要的2,导入在不同地点分别对#include,private成员放在头文件中,

切尔斯基 4619

读《C# 和 Java 的比较》有感

网上的一篇《C# 和 Java 的比较》(或者叫《Java 和 C# 的比较》)写的挺不错的,今天忽然搜索到。 自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就心血来潮在原作者的每一条之后斗胆都写了些文字。就当是给自己再加深一遍印象吧。   【非常抱歉,由于网上此文章已经被转载多次,所以真的找不到原出处了,所以没法贴出作者原贴的连接】   开始吧...   2007年...

从Java看编程 272

【Java/C++ 紧凑源码架构】:为什么你的类访问总是出问题?

掌握紧凑源文件的类访问技巧,解决Java/C++项目中因结构混乱导致的访问异常问题。适用于模块化开发与大型系统维护,通过合理封装和路径管理提升代码可读性与性能。方法实用高效,值得收藏。

BreakVein的博客 806

java和C#的个人之比较

网上的一篇《C# 和 Java 的比较》(或者叫《Java 和 C# 的比较》)写的挺不错的,今天忽然搜索到。 自己刚刚接触C#,也不由自主地随时都拿来和Java做对比,所以就心血来潮在原作者的每一条之后斗胆都写了些文字。就当是给自己再加深一遍印象吧。   【非常抱歉,由于网上此文章已经被转载多次,所以真的找不到原出处了,所以没法贴出作者原贴的连接】   开始吧...   2007年

ttwwok的专栏 802
上一篇: 设计模式摘抄(3)————行为型模式
下一篇: 系统分析
define_us
博客等级 码龄14年 157粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值