启动一个类和继承一个类有什么区别

时间:2013-03-18 15:01:05

标签: c# inheritance

我有三个类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”类方法添加,有两种方法

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

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

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

6 个答案:

答案 0 :(得分:45)

  

启动课程和继承课程有什么区别?

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

  

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

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

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

在每种情况下,第一种情况是“更多派生”类型 - 它是更具体 - 第二种是“较少派生”类型,或“基础” “类型。它是更通用的。水果比苹果更多。

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

  • 作业兼容性:您可以使用更多派生类型的表达式,其中需要基本类型的表达式。
  • 成员继承:基类的所有方法,事件,索引器,运算符,字段,属性和嵌套类型都是派生类的自动成员。 (构造函数和析构函数不可继承)。

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

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

所以在C#:

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

有意义吗?

答案 1 :(得分:7)

根本不是C#,而是基本的OOP概念,C#,在这种情况下,只是显示,object orientedstrong typed语言。

“初始化”是指给定类型的实例的创建:A

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

此案例中的访问行为相同,但其来源完全不同

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

您使用类模板(架构师计划) 实例化 对象的实例(构建房屋),然后 初始化 它(油漆和装饰房子)。

另一方面,

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

答案 4 :(得分:2)

你正在将人类与食物进行比较......没有比较

启动会花费您系统的RAM。

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

答案 5 :(得分:1)

类是一个允许您创建对象的模板。这些对象的创建也称为实例化。此实例化过程涉及为此对象分配内存(分配),然后初始化此对象,即为其字段提供初始值。后者称为初始化

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

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