回 帖 发 新 帖 刷新版面

主题:[讨论]C#中有关修饰符protected的问题

书中介绍如果一个类的成员声明时用了protected修饰符,那么可以被派生类的成员访问,而且还举了一个例子。
class Vehicle            //定义一个汽车类
{
    public int wheels;    //公共成员,任何类均可访问
    protected int weight;    //保护成员,只有派生类才可访问
    private int num;        //私有成员,只有本类可以访问
}
class Car:Vehicle        //定义一个继承自Vehicle的类Car
{
    public void F()
    {
        Vehicle v1 = new Vehicle();    //创建一个Vehicle类的实例v1
        v1.wheels = 4;                //这个没什么说的,因为任何类都可以访问,所以派生类也可以
        v1.weight = 10;                //[color=FF0000]这里我在机子上试的时候编译时提示不能访问,但在书上写着可以,我不明白为什么,还有就是继承类可以继承基类的private成员吗?如果不行的话,那么继承的类可以继承基类哪些成员呢?[/color]    }
[color=0000FF]最后一个问题,如果在基类中创建继承类的实例,那么可以访问那么这个实例就会有基类的private成员,但是如果在继承类本类中创建自己类的实例,则没有了基类中的private成员,我现在一直搞不清楚,希望大家帮我一下[/color]
[em8]

回复列表 (共4个回复)

沙发

Car可以访问当前实例基类的protected字段
但是Vehicle v1 = new Vehicle();和当前Car没有任何关系

在作继承类的时候,是不可以考虑基类的private成员的

板凳

[quote]Car可以访问当前实例基类的protected字段[/quote]
这句中的“当前实例基类”我还是不太理解啊,请版主再说明一下,或者举个例子

3 楼

实例就是类的具体化
比如ClassA a = new ClassA();就是很基本的实例化类的方法
类的实例与类的区别在于类是抽象的概念,而实例是抽象的具体化,只有实例可以直接使用。类实例化为不同的实例之后,这些实例相互独立,互不影响。

class Vehicle            //定义一个汽车类
{
    public int wheels;    //公共成员,任何类均可访问
    protected int weight;    //保护成员,只有派生类才可访问
    private int num;        //私有成员,只有本类可以访问
}
class Car:Vehicle{
    public void F()
    {
        Vehicle v1 = new Vehicle();    // Vehicle虽然和Car有继承关系,但是此处新建的Vehicle实例是一个单独的个体,与自身Car的实例无关
        v1.wheels = 4;
        v1.weight = 10;
    }
}

4 楼


谢谢版主,明白了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册