• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Paul Clapham
  • Tim Cooke
  • Jeanne Boyarsky
  • Liutauras Vilda
Sheriffs:
  • Frank Carver
  • Henry Wong
  • Ron McLeod
Saloon Keepers:
  • Tim Moores
  • Frits Walraven
  • Tim Holloway
  • Stephan van Hulst
  • Carey Brown
Bartenders:
  • Al Hobbs
  • Piet Souris
  • Himai Minh

Assigning base class object to sub class reference ?

 
Greenhorn
Posts: 28
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi ,

I have one doubt in the following code.
class A
{
}
class B extends A.

1. A objA=new A();
2. A obj=new B();
3. B objB=new A();

The first two line will work without giving any error. but for line 3, it will say compile time error.


May i know the reason why this is giving an error?

PLEASE HELP ME

Thanks
Arulraj
 
Java Cowboy
Posts: 16084
88
Android Scala IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The most important thing to remember about inheritance is that it is an "is a" relationship. So, an instance of a subclass is an instance of its superclass too.

Just like a dog is an animal, and a cow is an animal. Ofcourse it only works one way; if a dog is an animal, it doesn't mean that an animal is a dog.

In your code, an instance of B is an instance of A, so line #2 is no problem. However, an A is not necessarily a B, so line #3 doesn't work.
 
arulraj michealraj
Greenhorn
Posts: 28
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks.............
 
author
Posts: 14112
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
And the technical reason is that Java is a statically typed language - that is, the compiler uses the type information to check at compile time whether a method call is possible.

Imagine that class B declared a new method that isn't available in class A. Consequently, you could call that method on any B reference. If such a reference could point to an instance of A, the compiler couldn't know whether the object actually *knows* the method you are trying to call.

Google for "Liskov Substitution Principle" for more on this.
 
He was giving me directions and I was powerless to resist. I cannot resist this tiny ad:
the value of filler advertising in 2021
https://coderanch.com/t/730886/filler-advertising
reply
    Bookmark Topic Watch Topic
  • New Topic