【问题标题】:I want to know theoretical thing about programming我想知道关于编程的理论知识
【发布时间】:2012-04-01 14:14:04
【问题描述】:

我不确定一件事。面向对象编程有两件事。

  1. 构造函数

  2. 方法

其中哪一项可以重载,哪一项可以覆盖?

谢谢!

【问题讨论】:

    标签: object methods constructor


    【解决方案1】:

    两者都可以重载。 重载意味着拥有两个或多个名称完全相同但签名不同的方法或构造函数。类似的东西:

    public myClass(String a){}
    public myClass(Double d){}
    

    或方法:

    public void aMethod(String s){}
    publis int aMethod(Double d){
    return 0;
    }
    

    编辑: bebin,重写通常伴随着继承,当超类实现一个方法但子类需要以其他方式实现该方法时,例如: 在超类中:

    public int doSomething(){
      return a+2;
    }
    

    但在子类中:

    @override
    public in doSomething(){
    return a*2;
    }
    

    关于覆盖以下行的构造函数来自 CollinD,我引用它: “构造函数不是普通方法,它们不能被“覆盖”。说构造函数可以被覆盖意味着超类构造函数将是可见的并且可以被调用来创建子类的实例。这不是真的......默认情况下,子类没有任何构造函数(如果它扩展的类有一个无参数构造函数,则除外)。它必须显式声明任何其他构造函数,并且这些构造函数属于它而不属于它的超类,即使它们采用与超类构造函数相同的参数。

    您提到的关于默认无参数构造函数的内容只是构造函数工作方式的一个方面,与覆盖无关。”

    【讨论】:

    • 是的,我对此进行了研究,但请阅读上面的评论。我问一个情境问题。那么覆盖呢?还有,这是什么 ?我真的没有研究过,你能用例子解释一下吗我很感谢你:)
    • 我编辑了帖子,但我认为您已经找到了答案。仅适用于功能 googlers
    • 谢谢,这比以前更合适,非常感谢:)
    【解决方案2】:

    这可能取决于语言,但理论上两者都可以被重载和覆盖。

    C# 示例:

    class Parent {
        protected string Name;
    
        public Parent(string name) {
            this.Name = name;
        }
    
        public Parent(string firstName, string lastName) {
            this.Name = firstName + " " + lastName;
        }
    
        public virtual string GetName() {
            return this.Name;
        }
    }
    
    class Child : Parent {
        public Child(string firstName) : base(firstName, "Doe") {}
    
        public override string GetName() {
            return this.Name = " Jr.";
        }
    
        public string GetName(string prefix) {
            return prefix + " " + this.GetName();
        }
    }
    

    这说明了构造函数和方法的覆盖以及构造函数和方法的重载。

    【讨论】:

    • 没有人我确认构造函数不能被覆盖:) 但不确定方法
    • @AliRaza:PHP 不一样 :) 你有什么特定的语言吗?
    • @AliRaza 构造函数可以用多种语言覆盖。 Python 是另一个例子。
    • @AliRaza:事实上,如果没有提供无参数构造函数,它们也会在 C# 和 VB.NET 中被隐式覆盖。
    • 为什么 PHP 是一种脚本语言很重要?
    【解决方案3】:

    您可以重载和覆盖构造函数和方法。 (我认为构造函数实际上只是一种特殊的方法。)

    重写允许子类替换其父类的实现。

    重载允许您创建采用不同参数列表的不同版本的方法。

    【讨论】:

      猜你喜欢
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2012-05-20
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多