-1

我有如下所示的三个 A、B 和 C 类

public class A
{
    public void add(int i, int k)
    {
    }
}
public class B:A
{
    public void AddInt()
    {
        add(1, 2);
    }

}
public class C
{
    public void AddInt()
    {
        A objA = new A();
       objA.add(1, 2);
    }     

}

我们要访问“A”类方法Add,有两种方式

1) 启动“A”类,然后访问 Add 方法

2)继承“A”类,然后访问Add方法

如果这两种方式都提供相同的功能,那么为什么 C# 提供两种方式来实现相同的功能。

4

6 回答 6

52

初始化一个类和继承一个类有什么区别?

首先,您要查找的词是实例化,而不是启动

实例化类和继承类有什么区别?

继承表达了两个类之间的“是一种”关系:

  • 《纽约时报》是一种报纸。
  • 长颈鹿是一种动物。
  • 苹果是一种水果。

在每种情况下,第一种是“更多派生”类型——它更具体——第二种是“更少派生”类型,或“基本”类型。它更一般。水果比苹果还多。

在 C# 中,当你在两个类之间建立继承关系时,你会得到两件事:

  • 赋值兼容性:您可以在需要基类型表达式的情况下使用派生类型更高的表达式。
  • 成员继承:基类的所有方法、事件、索引器、运算符、字段、属性和嵌套类型都自动成为派生类的成员。(构造函数和析构函数不可继承)。

实例化是创建一个类型的新实例的过程。

  • 在这里,让我给你一份今天的《纽约时报》。
  • 在这里,让我给你一只长颈鹿。
  • 来,我给你一个苹果。

所以在 C# 中:

class Fruit {}
class Apple : Fruit { } // Apple inherits from Fruit
class Program {
  static void Main() {
    Apple apple = new Apple(); // Instantiating a new Apple
  }
}

有道理?

于 2013-03-18T15:31:34.283 回答
8

它根本不是C#关于基本OOP概念的C#,在这种情况下,它只是简单地表现出来,是面向对象强类型语言。

“初始化”是创建给定类型的实例:A在您的情况下。

第二个示例是多态,您从给定类型A派生并创建派生类型 B,能够访问A该类的公共/受保护成员。

在这种情况下访问行为是相同的,但其来源完全不同

于 2013-03-18T15:04:23.440 回答
5

您正在将人类与食物进行比较……对,没有可比性

启动会花费您系统的一些 RAM。

继承允许您启用通用代码的可重用性

于 2013-03-18T15:08:30.840 回答
3

这两种方法都是可用的,因为您的add方法在类 A 中是公共的。如果您只想在继承的类中使用它,请将其更改为受保护的。简单地说,继承使得除了私有属性和方法之外的所有属性和方法都可以在继承的类中使用。在您的情况下,类B是从类继承的,A并且类B本身的实例将是您调用方法的实例add。在类C中,您只需创建一个类的实例A并在其上调用方法add。如果您阅读有关Access ModifiersInheritance的内容,所有这些概念对您来说都会更加清晰。

于 2013-03-18T15:03:59.517 回答
3

将类视为如何构建某物的模板或计划。然后,当您使用模板或计划建造一个时(想想建筑师的房屋计划,以及根据这些计划建造的众多房屋之一),我们用来描述此过程的词是“实例化”和“初始化”。

您使用类模板(建筑师计划)实例化对象的实例(建造房屋),然后对其进行初始化(油漆和装饰房屋)。

另一方面,继承指的是完全不相关的东西,在如何定义类方面,使用另一个现有类作为基础或*base *line 来开始定义将扩展基础或类的新类。当一个类从另一个类继承时,这意味着派生类的“实例”会自动获取在父基类中定义的所有内容,而无需在子类中重新定义它。

于 2013-03-18T15:05:56.413 回答
2

类是一种类型,充当模板,允许您创建这种类型的对象。此类对象的创建也称为实例化。这个实例化过程包括为这个对象分配内存(分配)然后初始化这个对象,即给它的字段初始值。后者称为初始化

继承是完全不同的东西。继承是关于通过从基类(也称为超类或父类)继承现有代码来创建新类(模板)。这个新的派生类(也称为子类或子类)用作创建新类型对象的模板。

派生类可以修改从其基类继承的行为并扩展其可能性。继承创建类之间的关系。子类是与继承层次结构中它们之上的超类兼容的赋值。

于 2013-03-18T15:25:48.830 回答