精华内容
下载资源
问答
  • 建议90:不要为抽象提供公开的构造方法 首先,抽象可以有构造方法。即使没有为抽象指定构造方法,编译器也会为我们生成一个默认的protected的构造方法。下面是一个标准的最简单的抽象: abstract class ...

    建议90:不要为抽象类提供公开的构造方法

    首先,抽象类可以有构造方法。即使没有为抽象类指定构造方法,编译器也会为我们生成一个默认的protected的构造方法。下面是一个标准的最简单的抽象类:

        abstract class MyAbstractClass
        {
            protected MyAbstractClass(){}
        }

    其次,抽象类的方法不应该是public或internal的。抽象类设计的本意是让子类继承,而不是用于生成实例对象的。如果抽象类是public或internal的,它对于其它类型来说就是可见的,而这时不必要的,也是多余的。换句话来说,抽象类只需要对子类可见就行了。

     

     

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

    展开全文
  • C#面向对象基础

    2019-10-08 10:32:59
    Protected 表示继承时子可以对基类有完全访问权,也就是说,用protected修饰的成员,对子类公开,但不对其他类公开。 如果在中的成员没有加修饰符,则被认为是private。 通常字段是private,...

    Public 表示它所修饰的类成员可以允许其他任何类来访问,俗称公有的。

    Private 表示只允许同一个类中的成员访问,其他类包括它的子类无法访问,俗称私有的。

    Protected 表示继承时子类可以对基类有完全访问权,也就是说,用protected修饰的类成员,对子类公开,但不对其他类公开。

    如果在类中的成员没有加修饰符,则被认为是private。

    通常字段是private,即私有变量,而属性是public,即公有变量。

    属性名称一般首字母大写,字段一般首字母小写或前加“_”。

     

    构造方法又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new时候调用。

    所有的类都有构造方法,如果不编码则系统默认生成空的构造方法,若有定义的构造方法,则默认的构造方法就会失效。

     

    方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型或参数个数有所不同。

     

    属性是一个方法或一对方法,但在调用它的代码来看,它是一个字段,及属性适合一字段的方式使用方法调用的场合。字段是存储类要满足其设计需要的数据,字段是与类相关的变量。

     

    面向对象的三大特征:封装、继承、多态

    封装的好处:第一、良好的封装能够减少耦合。

                         第二、类内部的实现可以自由的修改。

                         第三、类具有清晰的对外接口。

     

    继承 对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以描述为‘B是A’,则表明B可以继承A。

    如果子类继承于父类:第一、子类拥有父类非private的属性和功能

              第二、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能。

                                第三、子类还可以以自己的方式实现父类的功能(方法)

    子类从它的父类中继承的成员有方法、域、属性、事件、索引器。但对于构造方法,它不能被继承,只能被调用。对于调用父类的成员,可以用base关键字。

     

    多态表示不同的对象可以执行相同的操作,但要通过它们自己的代码来执行。

    第一、   子类以父类的身份出现。

    第二、   子类在工作时以自己的方式来实现。

    第三、   子类以父类的身份出现时,子类特有的属性和方法不可以使用。

    为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加virtual关键字来实现。子类可以选择使用override关键字,将父类实现替换为它自己的实现,这就是方法重写Override,或者叫做方法覆盖。

    注:通常虚拟的是方法,但其实除了字段不能是虚拟的,属性、事件‘索引器都可以是虚拟的。尽管方法可以是虚拟的,但虚拟方法还是有方法体,可以实际做些事情。

    对象的生命必须是父类,而不是子类,实例化的对象是子类,这才能实现多态。多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就是说,虚方法是按照其运行时的类型而非编译时类型进行动态绑定调用的。

    例如:动物 animal=new 狗();

             或者

             狗 dog =new 狗();

             动物 animal=dog();

     

    抽象类需要注意几点:

    第一、   抽象类不能实例化

    第二、   抽象方法是必须被子类重写的方法。其实抽象方法可以看成是没有实现体的虚方法。

    第三、   如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。

    抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里,树节点应当是具体类,而树枝节点均应当是抽象类。

     

    接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的属性和成员。声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。

    接口不能实例化、不能有构造方法和字段、不能有修饰符、不能声明虚拟的或静态的、实现接口的类就必须实现接口中的所有方法和属性。

    一个类可以支持多个接口,多个类也可以支持相同的接口。

    接口中的方法或属性不能有修饰符,方法没有方法体。

    interface IChange

    {

           string ChangeThing(string thing);

    }

     

    抽象类可以给出一些成员的实现,接口却不能包含成员的实现

    抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现

    一个类只能继承一个抽象类,但可以实现多个接口

    第一、   类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。

    第二、   如果行为跨越不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类。

    第三、   从设计角度讲,抽象类是从子类发现公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确定,预先定义。        

     

    数组的优点:在内存中连续存储,因此可以快速而容易地从头到尾遍历元素,可以快速修改元素等等。

    数组的缺点:创建时必须要制定数组变量的大小,还有在两个元素之间添加元素也比较困难。

     

    集合

    ArrayList是命名空间System.Collections下的一部分,它是使用大小可按需要动态增加的数组实现IList接口。ArrayList的容量是ArrayList可以保存的元数据。ArrayList的默认初始容量为0.随着元素添加到ArrayList中,容量会根据需要通过重新分配自动增加。使用整数索引可以访问此集合中的元素。此集合中的索引从零开始。

    ArrayList的优点:可以根据使用大小按需动态增加,不用受事先设置其大小的控制。

                                可以随意添加、插入或移除某一范围的元素,比数组要方便。

    ArrayList的缺点:ArrayList不管是什么对象都接受,所有元素都看成Object,ArrayList不是类型安全的。

                                ArrayList将值类型装箱为Object对象,使用集合元素时需要拆箱操作,带来很大的性能损耗。

    泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符:类型参数作为其字段的类型和其方法的参数类型出现。

     

    委托与事件

    委托是对函数的封装,可以当作给方法的特征制定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。

    委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为,委托对象用关键字delegate来声明。在发生其他类或对象关注的事情时,类或对象可以通过事件通知它们,事件对象用event关键字声明。

     

    转载于:https://www.cnblogs.com/hlfei/p/3807581.html

    展开全文
  • 修饰符   Private ...只对子类公开 修饰符就是对变量、方法的公开程度的定义、设置权限 属性 里写属性是要写成方法的、先定义一个变量、然后设置他的读写方法、get和set、如图


    修饰符就是对变量、方法的公开程度的定义、设置权限


    修饰符

     点击查看链接

    Private

     私有

    public

    共有

    Protected

    只对子类公开



    属性:

          类里写属性是要写成方法的、先定义一个变量、然后设置他的读写方法、get和set、如图



    之所以变量定义成私有、写成方法、是因为这样可以控制变量、对其限制、下面是对小猫叫次数的限定




    总结:

         其实修饰符就是定义访问权限、对其进行限制、而写类的属性就是定义一个变量、写成一个方法、方法对这个变量进行读写属性。



    ——————chenchen——————

    展开全文
  • 完全对外公开,只对子类公开,完全不公开,这里对子类的可见性是完全不受继承时的可见性影响的,就是说无论是public,protected还是private继承,父类public protected属性在子类中时永远可见的,private时永远不...

    继承可见性:

    c++中 public protected private 三种可见性可以分别理解为

    完全对外公开,只对子类公开,完全不公开,这里对子类的可见性是完全不受继承时的可见性影响的,就是说无论是public,protected还是private继承,父类public protected属性在子类中时永远可见的,private时永远不可见的。

    那么三种继承的可见性就可以理解为:

    可见的属性继承为public属性(public继承)

    可见的属性继承为protected属性(protected继承)

    可见的属性继承为private属性(private属性)

    参考文档:

    http://www.cnblogs.com/motadou/archive/2010/03/12/1683974.html

    多态:

    父类中声明的虚函数:非纯虚函数和纯虚函数,在子类中进行重写。当使用父类指针的时侯可以根据虚函数表自动调用符合当前对象的函数。抽象地来说就是多态(polymorphism)就是在c++中使用同一份源码编译出来的程序可以在执行的过程中有不同的行为。就目前我的理解来看,多态就是在使用指针的时候可以正确的使用自身类的函数就算是指针类型不是自己的类型。

    只有声明了virtual的函数才能有多态的特性,如果是直接覆盖的话是没有多态的特性的,从外界运行的角度来看,只会调用当前指针所属类型的相应函数。

    在c++11里新增了override保留字,可以在子类重写父类虚函数的时候在函数末尾添加override,同样也可以不添加。功能就是提高了代码的可读性,如果不是重写父类虚函数的时候用了override的时候编译器会直接报错,没有override的时候编译器会认为是一个新的函数而通过编译。

     

     

    在使用的过程中使用同一继承路径下的指针指向另一个对象的时候,比如下面的继承关系:

    A-B-C-D,其中A是父类,D是子类

    A* ptr= &d_obj;

    在这种情况下,在储存的过程中d_obj这个对象仍然是D类。但是在所有外界来看这个ptr就是一个A类的指针,是无法看到BCD派生的部分的,例外的情况仅出现在使用多态的情况下会查找虚函数表,除此之外行为和A类对象,即使是最后的delete操作。

     

    以上纯属个人观点,保证客观正确但不保证概括全面,如果有错误请指出

     

     

    展开全文
  • 接口与抽象

    2015-01-31 11:38:00
    封装:每个对象都包含它能进行操作所需要的信息,而不依赖其它对象来完成...Protected表示继承时子可以对基类有完全的访问权,对子类公开,但不对其它类公开。子类从它的父类中继承的成员有方法,或,属性,事件...
  • 建议90:不要为抽象提供公开的构造方法 首先,抽象可以有构造方法。即使没有为抽象指定构造方法,编译器也会为我们生成一个默认的protected的构造方法。下面是一个标准的最简单的抽象: abstract class...
  • 建议90:不要为抽象提供公开的构造方法 首先,抽象可以有构造方法。即使没有为抽象指定构造方法,编译器也会为我们生成一个默认的protected的构造方法。下面是一个标准的最简单的抽象: abstract class...
  • 指定通过ODBC或JDBC公开此数据类型时使用的类型。每个数据类型都必须指定一个ODBC类型。此关键字仅适用于数据类型。 用法 要指定通过ODBC或JDBC投影此数据类型时要使用的类型,请使用以下语法: Class MyApp....
  • 现有自选子秘密的可验证秘密共享方案,不能同时实现对子秘密的更新和公开验证。为此,基于双线性对提出一种可公开验证可更新多秘密共享方案。参与者选取子秘密,影子秘密参与重构,不会泄漏真实的秘密份额;利用单向...
  • 文档介绍:诫子书诸葛亮领倦渗吼衍濒古趋埠联苇俐墓门兹延盾惭脾掳省漱狞量口稽拳平柯荒馏遗诫子书(段然)诫子书(段然)诸葛亮你知道他有...情感态度价值观:理解文中深刻的人生理念和父对子的殷殷期望。妻榷杆虎封歹...
  • 标准和对象 成员变量和局部变量的区别: 我是谁?(我有默认值)我在哪?(Heap)我要到哪去?(随对象而去) 成员变量在堆内存里(new 在堆里),生命周期:随对象而消失,有默认初值 局部变量在方法区...
  • Java学习笔记(的可见性)

    千次阅读 2013-01-06 08:36:59
     public:公开类,在包内,包外都可见,是可见性级别最高的; 友好的:也是默认的安全级别,包外不可见,包内可见.用在内部类同protected级别相同. protected:保护级,只能用于内部类.对类及子类(包内子类,包外子类不...
  • java分布式(特性)

    千次阅读 2018-06-05 21:35:33
    【 声明:版权所有,欢迎转载,请勿用于商业用途。...诚然,java克服了很多c++的...因此,我们有必要好好的说一说java的特性。1、主类和普通 java文件的特点,决定了文件名和主类必须是一样的。假设文件是node....
  • 抽象 抽象方法 抽象方法就是指不能被具体实现的方法,也就是没有方法体,并且使用abstract关键字修饰; 语法格式: 访问修饰符 abstract void show(); 抽象 抽象就是指使用abstract关键字修饰...
  • NEEPU Sec 2021 公开赛 Crypto RSA 题目描述 题目解析 AES 题目描述 中国古代加密 Misc The Puzzles of the Fifteen Tiles NEEPU Sec 2021 公开赛 和buu一个风格的网站 Crypto RSA 组员都做出来,...
  • 受保护级别 protected修饰 对子类和同一个包中的类公开 默认级别 无修饰符号 对同一个包的类公开 私有级别 private修饰 只有本身可以访问 不对外公开 5.实例变量不能通过 类名.变量名 来访问 这不肯定的么~ 6....
  • 看到这个标题,突然灵光一闪,好像似曾相识......上次公开课分享:GROUP BY另类优化技巧 哈,或许你会好奇郑老师是何方神圣? 公开课来了 -----分享时间----- 2017年7月27日,20:30-21:30  (周四
  • 第三章:抽象、接口、面向接口编程一:抽象(1)什么是抽象(2)抽象的总结二:接口(1)接口的定义(2)接口的总结三: 抽象与接口的比较 一:抽象 (1)什么是抽象 抽象就是将多个具有共性实例...
  • java 抽象 接口 多态

    2017-05-26 09:29:29
    java 抽象 接口 多态 java 继承和多态 子类重写父类的实例方式,产生自己的功能行为,当把创建的子类对象的引用赋给父类对象,然后该父类对象(上转型对象)调用这个实例方法时就可能具有多种形态 java 接口和...
  • 总的来说,这些编码方法可以分为三大:二进制编码法、浮点编码法、符号编码法。下面分别进行介绍: 5.1.1 二进制编码法 就像人类的基因有AGCT 4种碱基序列一样。不过在这里我们只用了0和1两种碱基,然后将...
  • Java访问控制修饰符

    2021-03-22 00:35:20
    受保护级别:用protected修饰,对子类和同一个包中的类公开 默认级别:没有修饰符号,向同一个包的类公开 私有级别:用private修饰,只有本身可以访问,不对外公开 2. 四种访问控制修饰符的访问范围 访问级别...
  • 和对象 简单来说,是对象的蓝图和模板,而对象是的实例。是抽象的概念,而对象是具体的东西。比如人类就属于,当具体到某一个人的时候这个人就是对象。 在面向对象的编程世界中,一切皆对象,对象都有...
  • protected 对子类和同一个包中的类公开 不写,也就是默认情况下,对同一个包的类公开 private 只有本身可以访问,不对外公开 包 引入:假如两个程序员共同开发一个java项目,但是两个人定义某个的...
  • 变量小结:1.什么时候需要变量。案例:定义学生统计交多少钱时。2.变量与实例变量的区别:a.加上static成为变量或静态变量,否则称为实例变量。b.变量与是相关的,公共的属性。c.实例变量属于每个对象...
  • 第七个是对子进程能否获取比父亲更多的权限的一个限制。 InitContainer InitContainer 和普通 container 的区别,有以下三点内容: InitContainer 首先会比普通 container 先启动,并且直到所有的 InitContainer ...
  • 而只需要描述汽车和飞机所特有的特性即可,飞机和汽车的特性是由在交通工具原有特性基础上增加而来的,那么飞机和汽车就是交通工具的派生(也称做子类)。以此类推,层层递增, 这种子类获得父类...
  • 访问修饰词--Java

    2019-10-01 12:42:43
     权限: 对子类和同包中的其他类公开 default(默认的,可不写)  权限: 对同包中的其他类公开 private(私有的)  权限: 本类公开 public protected default private 本 √ √ √ ...
  • Chapter7 的复用(reusing classes)1. 组合语法(composition syntax)2. 继承语法(inheritance syntax)2.1初始化父类2.2 带参数的构造器3. 委托(Delegation)4. 组合和继承的复合5. composition vs. ...
  • 同时对子查询谓词无法进入导致SQL性能下降的问题,提供了优化思路。 提示:PPT的内容有限,建议结合PPT观看视频,效果更佳! 课程预告: 郑老师主讲的《SQL开发优化》课程预计8月13日开班,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,011
精华内容 1,204
关键字:

对子类公开