2011-12-18 88 views
10

可能重複:
Difference between object and instanceC#中的對象和類之間有什麼區別?

我有幾個問題:

  1. 一類的每個實例(除了一個抽象類)是一個對象?
  2. 抽象類不能被實例化,因此它們不是對象?

任何人都可以幫助我更好地理解上述概念,因爲它們涉及到C#?

+0

1.是(給定#2)和2.是。一個曲線球是靜態類,它們在進程的整個生命週期中基本上是單個對象。 – 2011-12-18 06:08:28

+0

它有助於將抽象類視爲等價於接口。它們只是可以提供默認實現的接口。 – 2011-12-18 06:10:06

+0

相關:http://stackoverflow.com/questions/3323330/difference-between-object-and-instance和http://stackoverflow.com/questions/3686647/whats-the-best-way-to-define-the -words-class-and-object-to-someone-who-hasn – 2011-12-18 06:12:23

回答

24
  1. 對象是類的一個實例。

  2. 類是一個對象的定義。它實際上並沒有成爲一個對象,直到它被實例化。由於抽象類無法實例化,因此不能創建該類型的對象。爲了創建對象,需要定義一個子類。

12
  1. 是的,每個類的實例都是一個對象。

  2. 類(不論是否抽象)不是對象。他們是類型。

+0

即使摘要類可以被實例化,但它們仍然不是對象。 – 2011-12-18 06:10:22

+0

應該指出的是,在某些語言中,類也是對象。 – 2013-04-16 15:15:46

+0

@ marco-fiset嗯,這與C#特別相關,所以不確定其他語言在這裏如何相關。 – jdmdevdotnet 2017-06-30 22:02:31

2

一個抽象類永遠不能實例化(所以永遠不能成爲一個對象)。如果您創建的繼承自抽象基類的類並實例化它,那麼它將具有抽象類的屬性以及它自己的屬性。創建抽象基類後的目標是「強制」派生類來實現某些功能(類似於接口,但不完全)。

+0

即,接口*不能*具有任何*實現的方法,但僅僅是:接口。 – Gravity 2011-12-30 01:40:47

10

有一個常見的比喻,可能更清楚地表明類和對象的概念之間有什麼區別。

一個班級就像一個食譜。一個物體是蛋糕。從一個食譜你可以建立許多蛋糕。配方只能包含提示(是抽象的),併爲您自己創建配方(實現類)留下空間,然後您可以從中製作蛋糕(對象)。

所以一個類不是一個對象,它是該類的對象的描述。抽象類包含方法和其他有用的信息,用於實現從這個抽象類派生的類。對象不能從抽象類創建/實例化(因爲它的定義不完整)。

2

每個類的實例(抽象類除外)都是一個對象?

是的。這就是「實例」的定義。

抽象類不能被實例化,因此它們不是對象?

類與實例或對象不相同。一個對象是一個類的實例。想象一下動物園模擬。一個物體就像一隻特定的獅子,而一個類更像是一隻獅子的描述。抽象類是對那些過於模糊的事物的描述,使得僅基於該描述來構建某些東西是合理的(例如「動物」)。這就是爲什麼你不能實例化它們。像動物一樣的東西可能太模糊,不能直接請求程序;相反,該計劃只會要求更具體的東西,如獅子,老虎或貓鼬。

6
class Cat {} // It is a cat. Just a cat. Class is a general issue. 

myCat = new Cat("red", "5kg", "likes milk", "3 years old"); // It is my cat. It is an object. It is really a cat. 

yourCat = new Cat("gary", "3kg", "likes a meal", "5 years old"); // It is your cat. Another cat. Not my cat. It is really a cat too. It is an object; 

abstract class Animal {} // Abstract class 
animal = new Animal(); // It is not correct. What is 'animal'? Cat, dog, cow? I don't know. 

class Dog : Animal {} // It is a class. It is a dog in general. 
someDog = new Dog("brown", "10 kg", "likes cats"); // It is really a dog. It is an object. 
相關問題