当前位置:  开发笔记 > 编程语言 > 正文

如何从子类对象中隐藏父类方法?

如何解决《如何从子类对象中隐藏父类方法?》经验,为你挑选了1个好方法。

我希望hide the parent class method for the the child class object.My Circle对象在我访问该方法时向我显示两种方法:

在此输入图像描述

在此输入图像描述

objShape是Shape类的对象,它是抽象类.

我想隐藏在第2张图像上显示的方法.

这里Circle类扩展了Oval类,而Oval类扩展了Shape类.

形状类编码

abstract public class Shape
    {        
        public abstract double Area(double dNum1 = 0.0, double dNum2 = 0.0);


        public abstract double Perimeter(double dNum1 = 0.0, double dNum2 = 0.0);

    }

椭圆类编码

class Oval : Shape
    {
        public override double Area(double dNum1 = 0.0, double dNum2 = 0.0)
        {
            double dAns = Math.PI * dNum1 * dNum2;
            return dAns;
        }

        public override double Perimeter(double dNum1 = 0.0, double dNum2 = 0.0)
        {
            double dTmp1, dTmp2, dAns;

            dTmp1 = 2 * (dNum1 * dNum1);
            dTmp2 = 2 * (dNum2 * dNum2);
            dAns = (Math.PI / 2) * Math.Sqrt(dTmp1 + dTmp2);

            return dAns;
        }      
    }

圆类代码

class Circle : Oval
    {

        public double Area(double dNum1)
        {
            double dResult = base.Area(dNum1, dNum1);
            return dResult;
        }

        public double Perimeter(double dNum1)
        {
            double dAns = base.Perimeter(dNum1, dNum1);
            return dAns;
        }

    }

那么,在这里我如何隐藏对Circle类对象的Oval类方法的直接访问.在第二个图像中显示建议,我可以使用该方法,但我不想要这个建议,我不想在Circle类对象中使用该方法.



1> Jon Skeet..:

在第二个图像中显示建议,我可以使用该方法,但我不想要这个建议,我不想在Circle类对象中使用该方法.

那么你基本上不应该Circle从中衍生出来Oval.不要忘记,拥有一个类型的变量是完全可以接受的,该变量Oval在执行时具有一个值,引用一个实例Circle:

Oval x = new Circle();
Console.WriteLine(x.Area(10, 20));

从根本上说,任何对基类有意义的操作对于派生类也应该是有意义的,在一个合理的继承层次结构中.

如果要保留继承层次结构,则应考虑重新设计,使得半径等是对象状态的一部分,而不是作为参数传入.例如:

public abstract class Shape
{
    public abstract double Area { get; }
    public abstract double Perimeter { get; }
}

public class Oval
{
    private double Width { get; }
    private double Height { get; }

    public override double Area { get { ... } };
    public override double Perimeter { get { ... } };

    public Oval(double width, double height)
    {
        Width = width;
        Height = height;
    }
}

public class Circle
{
    public double Radius { get { return Height; } }

    public Circle(double radius) : base(radius)
    {
    }
}


@KalpeshRajai:然后你的设计被打破了 - 就这么简单.你不能将`Circle`实例视为`Oval`,因此`Circle`不应该来自`Oval`.
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有