类的声明和访问级别

类声明

类声明的位置

1.命名空间内 2.创建另一个自己的命名空间 3.在命名空间外声明类,实际声明在全局命名空间 4. 在类内声明类,成为一个类的成员类

声明即定义(c#,java)

c,c++声明与定义分开,也可以合并在一起。

最简单的类声明

class-modifyers(opt类修饰符) class identify {class body}

类修饰符

new 适用于嵌套类
internal(在类库内可访问),protected,internal,private 修饰符将控制类的可访问性
abstract
sealed
static

类的访问控制

类成员的访问控制

一个类库

using System;

namespace Mylib
{
    public class Vehicle
    {
        public int MyProperty { get; set; }
    }
}

主函数

using Mylib;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Vehicle vehicle = new Vehicle();
            vehicle.MyProperty = 100;
            System.Console.WriteLine(vehicle.MyProperty);

        }
    }
}

如果将类库里的成员函数的访问级别设为internal(默认为internal),那么尽管这个类是public,他的成员却无法访问
类库里的成员若为private,则类外继承的子类无法访问父类的成员(protected和public可以)

protected将访问级别控制在继承链上。
访问级别还可以进行组合……

类的继承

基类-派生类 (父类-子类)
如果类没有继承,那么默认继承与system.object类。system.object无基类。
子类的实例也是父类的实例。可以用父类型的变量去引用子类的实例。子类的访问级别不能超越基类的访问级别。只能有一个基类,但是可以实现多个基接口。
继承的本质:派生类在基类已有的成员基础之上,对基类进行的横向和纵向上的扩展:

1.子类完整接受父类成员
静态类型语言(c++,c#,java)中,类成员一旦被引入继承链当中,他就会永远的向下传递,不能移除 .动态类型(python,javascript)可移除。
横向-类成员在数量上的扩充,纵向-类的更新迭代。

从基类构造器开始,先构造基类对象,然后一级一级往下构造,如果基类构造器带参数,那么子类也应该带参数。
特别注意的是,构造器是不被继承的,完全继承的是方法,属性,事件等。当出现基类构造器带参数时,采用以下两种方法

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();
            car.show();
            Console.WriteLine(car.MyProperty);

        }
    }

    class Vehicle
    {
        public Vehicle( int content)
        {
            this.MyProperty = content;

        }
        public int MyProperty { get; set; }

    }

    class Car : Vehicle
    {
        public Car() : base(125)//1.
        {
            this.MyProperty = 2;
        }
        public Car(int content):base(content)//2.
        {}
        public void show()
        {
            Console.WriteLine(base.MyProperty);
        }

    }
}

面向对象的分格

class-based 基于类的继承封装多态
prototype-based 基于原型的继承封装多态(javascript)

原文地址:https://www.cnblogs.com/lpxspring/p/12393901.html

时间: 2024-08-05 10:50:39

类的声明和访问级别的相关文章

C++primer原书中的一个错误(派生类using声明对基类权限的影响)

在C++primer 第4版的 15章 15.2.5中有下面这样一段提示: "注解:派生类可以恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更严格或者更宽松." 在vs2010中经过验证,这段话是错误的.具体见以下代码: //Base.h #pragma once #include <iostream> using namespace std; class Base { public: Base(void); ~Base(void); size_t size()

你好,C++(32) 类是对现实世界的抽象和描述 6.2.1 类的声明和定义

6.2  类:当C++爱上面向对象 类这个概念是面向对象思想在C++中的具体体现:它既是封装的结果,同时也是继承和多态的载体.因此,要想学习C++中的面向对象程序设计,也就必须从“类”开始. 6.2.1  类的声明和定义 面向对象思想把现实世界中的所有事物都看成是对象,而类是对所有相同类型对象的抽象,是对它们总体的一个描述.比如,学校有很多老师,张老师.李老师.王老师,虽然每个老师各不相同,是不同的对象个体.但他们都是老师这一类型的对象,有着共同的属性(都有姓名.职务)和相同的行为(都能上课.批

c++ 类前置声明【转】

[转自 here] 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面.如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似"缺少类型说明符"这样的出错提示. 代码一: // ForwardDeclaration.h #include <iostream> using namespace std; class B;

利用反射——查看类的声明

/** *类的声明包括常见修饰符(public.protected.private.abstract.statc.final等). * 类的名称.类的泛型参数.类的集成类(实现的接口)和类的注解等 * Class类的实例表示正在运行的Java应用程序中的类和接口. * 枚举是一种类,注解是一种接口 * 每个数组属于被映射为Class对象的一个类,所有具有相同元素类型和维数的数组都共享该Class对象. * Java的基本类型和关键字void也表示为Class对象,但没有构造方法 * Class对

(C++)浅谈多态基类析构函数声明为虚函数

主要内容: 1.C++类继承中的构造函数和析构函数 2.C++多态性中的静态绑定和动态绑定 3.C++多态性中析构函数声明为虚函数 1.C++类继承中的构造函数和析构函数 在C++的类继承中, 建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推: 析构对象时,其顺序正好与构造相反: 具体参考文章:http://www.cnblogs.com/AndyJee/p/4575385.html 2.C++多态性中的静态绑定和动态绑定 对象的静态类型:对象在声明是采用的类型,在

OC -- 简单类的声明与定义

#import <Foundation/Foundation.h> // 类的声明:类名的定义第一个字母一定要大写,如果由多个单词构成用驼峰法:例 MyBlog @interface Person : NSObject{ // 类属性的定义:属性名要由下划线开头:例 _age @public int _age; float _height; } // 类方法的定义 - (void)eat; @end // 类的实现 @implementation Person // 实现类方法 - (void

C++ 类声明 类前置声明范例

转载自http://www.cnblogs.com/staring-hxs/p/3244251.html 在编写C++程序的时候,偶尔需要用到前置声明(Forward declaration).下面的程序中,带注释的那行就是类B的前置说明.这是必须的,因为类A中用到了类B,而类B的声明出现在类A的后面.如果没有类B的前置说明,下面的程序将不同通过编译,编译器将会给出类似"缺少类型说明符"这样的出错提示. 代码一: // ForwardDeclaration.h #include <

黑马程序员--oc 类的声明和实现

类的声明和实现 类的声明 #import<Foundation/Foundation.h> //NSObject让类具有创建对象的能力,同样包含在Foundation框架中 @interface类名 : NSObject {//@public 可以让外部指针间接访问对象内部成员变量 @public 成员变量: 成员变量: } //方法(行为):方法名参数返回值(声明和实现) //只要是OC对象的方法必须以 - 开头 OC方法中的任何数据类型必须用()括住,且只能括住数据类型不能乱写 方法声明:

OC面向对象编程-类的声明和对象的创建

一 OC类的声明和实现 1.接口的声明 @interface NewClassName: ParentClassName { 实例变量 ... } 方法的声明 ... @end 2.类的实现 @implementation NewClassName { 方法的实现 //code ... } @end