Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can abstract classes have references but not objects?

Note that you cannot construct an object of an abstract class, but you can still have an object reference whose type is an abstract class. Of course, the actual object to which it refers must be an instance of a concrete subclass:

Account anAccount; // OK
anAccount = new Account(); // Error—Account is abstract
anAccount = new SavingsAccount(); // OK
anAccount = null; // OK

Not understanding why you can have an object reference to an abstract class...

like image 526
user2809437 Avatar asked Oct 28 '13 02:10

user2809437


1 Answers

When you have an object reference whose type is an abstract class, that reference doesn't mean "I'm referencing an abstract class." Instead, it means "I'm referencing some actual object that's a subclass of that abstract class." This is why you can have the reference refer to a SavingsAccount, which is a non-abstract class that subclasses from Account, but you can't have it point to a new Account(), since you can't actually instantiate Account.

Note that the reference itself isn't an actual instance of the abstract class.

Hope this helps!

like image 63
templatetypedef Avatar answered Oct 28 '22 13:10

templatetypedef