|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



INHERITANCE




Object-oriented programming allows classes to inherit commonly used state and behavior from other classes.


Definition (Inheritance) Inheritance is the mechanism which allows a class A to inherit properties of a class B. We say ``A inherits from B''. Objects of class A thus have access to attributes and methods of class B without the need to redefine them. The following definition defines two terms with which we are able to refer to participating classes when they use inheritance.

Definition (Superclass) If class A inherits from class B, then B is called superclass of A.

Definition (Subclass) If class A inherits from class B, then A is called subclass of B.



Objects of a subclass can be used where objects of the corresponding superclass are expected. This is due to the fact that objects of the subclass share the same behaviour as objects of the superclass. Superclasses are also called parent classes. Subclasses may also be called child classes or extended classes or just derived classes . Of course, you can again inherit from a subclass, making this class the superclass of the new subclass. This leads to a hierarchy of superclass/subclass relationships.

The idea of inheritance is simple but powerful: When you want to create a new class and there is already a class that includes some of the code that you want, you can derive your new class from the existing class. In doing this, you can reuse the fields and methods of the existing class without having to write (and debug!) them yourself.

A subclass inherits all the members (fields, methods, and nested classes) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.



What You Can Do In A Subclass:



A subclass inherits all of the public and protected members of its parent. You can use the inherited members as is, replace them, hide them, or supplement them with new members:

The inherited fields can be used directly, just like any other fields.
You can declare a field in the subclass with the same name as the one in the superclass, thus hiding it (not recommended).

You can declare new fields in the subclass that are not in the superclass.

The inherited methods can be used directly as they are.

You can write a new instance method in the subclass that has the same signature as the one in the superclass, thus overriding it.

You can write a new static method in the subclass that has the same signature as the one in the superclass, thus hiding it.

You can declare new methods in the subclass that are not in the superclass.

You can write a subclass constructor that invokes the constructor of the superclass, either implicitly or by using the keyword super.




Overriding



Following example shows, adding new varibles, new methods, redefining existing methods.



EXAMPLE:
class parent;
task printf();
$display(" THIS IS PARENT CLASS ");
endtask
endclass

class subclass extends parent;
task printf();
$display(" THIS IS SUBCLASS ");
endtask
endclass

program main;

initial
begin
parent p;
subclass s;
p = new();
s = new();
p.printf();
s.printf();
end
endprogram

RESULT

THIS IS PARENT CLASS
THIS IS SUBCLASS


Super



The super keyword is used from within a derived class to refer to members of the parent class. It is necessary to use super to access members of a parent class when those members are overridden by the derived class.


EXAMPLE:
class parent;
task printf();
$display(" THIS IS PARENT CLASS ");
endtask
endclass

class subclass extends parent;
task printf();
super.printf();
endtask
endclass

program main;

initial
begin
subclass s;
s = new();
s.printf();
end
endprogram

RESULT

THIS IS PARENT CLASS




The member can be a member declared a level up or be inherited by the class one level up. There is no way to reach higher (for example, super.super.count is not allowed).

Subclasses (or derived classes) are classes that are extensions of the current class whereas superclasses (parent classes or base classes) are classes from which the current class is extended, beginning with the original base class.

NOTE: When using the super within new, super.new shall be the first statement executed in the constructor. This is because the superclass must be initialized before the current class and, if the user code does not provide an initialization, the compiler shall insert a call to super.new automatically.




Is Only Method



Programmers can override the existing code/functionality before existing code and replaces with new code as shown in below example.


EXAMPLE:
class parent;
task printf();
$display(" THIS IS PARENT CLASS ");
endtask
endclass

class subclass extends parent;
task printf();
$display(" THIS IS SUBCLASS ");
endtask
endclass

program main;

initial
begin
subclass s;
s = new();
s.printf();
end
endprogram

RESULT:

THIS IS SUBCLASS


Is First Method



Programmers can add new lines of code/functionality before existing code as shown in below example.


EXAMPLE:
class parent;
task printf();
$display(" THIS IS PARENT CLASS ");
endtask
endclass

class subclass extends parent;
task printf();
$display(" THIS IS SUBCLASS ");
super.printf();
endtask
endclass

program main;

initial
begin
subclass s;
s = new();
s.printf();
end
endprogram

RESULT:

THIS IS SUBCLASS
THIS IS PARENT CLASS


Is Also Method



Programmers can add new lines of code/functionality after the existing code as shown in below example.


EXAMPLE:
class parent;
task printf();
$display(" THIS IS PARENT CLASS ");
endtask
endclass

class subclass extends parent;
task printf();
super.printf();
$display(" THIS IS SUBCLASS ");
endtask
endclass

program main;

initial
begin
subclass s;
s = new();
s.printf();
end
endprogram

RESULT:

THIS IS PARENT CLASS
THIS IS SUBCLASS


Overriding Constraints.



Programmers can override the existing constraint and replaces with new constraint as shown in below example.


EXAMPLE:
class Base;
rand integer Var;
constraint range { Var < 100 ; Var > 0 ;}
endclass

class Extended extends Base;
constraint range { Var < 100 ; Var > 50 ;} // Overrighting the Base class constraints.
endclass

program inhe_31;
Extended obj;

initial
begin
obj = new();
for(int i=0 ; i < 100 ; i++)
if(obj.randomize())
$display(" Randomization sucsessfull : Var = %0d ",obj.Var);
else
$display("Randomization failed");
end
endprogram

RESULT:

Randomization sucsessfull : Var = 77
Randomization sucsessfull : Var = 86
Randomization sucsessfull : Var = 76
Randomization sucsessfull : Var = 89
Randomization sucsessfull : Var = 86
Randomization sucsessfull : Var = 76
Randomization sucsessfull : Var = 96


Overriding Datamembers



Only virtual methods truly override methods in base classes. All other methods and properties do not override but provide name hiding.



EXAMPLE
class base;
int N = 3;

function int get_N();
return N;
endfunction
endclass

class ext extends base;
int N = 4;

function int get_N();
return N;
endfunction

function int get_N1();
return super.N;
endfunction
endclass

program main;
initial
begin
ext e = new;
base b = e; // Note same object!
$display(b.get_N()); // "3"
$display(e.get_N()); // "4"
$display(e.get_N1()); // "3" - super.N
end
endprogram

RESULT

3
4
3

Index
Introduction
Class
Object
This
Inheritance
Encapsulation
Polymorphism
Abstract Classes
Parameterised Class
Nested Classes
Constant
Static
Casting
Copy
Scope Resolution Operator
Null
External Declaration
Classes And Structures
Typedef Class
Pure
Other Oops Features
Misc

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer