Site icon C1CTech

Kotlin Abstract Classes and Abstract Members

<p>In this article&comma; you will learn about Kotlin abstract classes&comma; abstract methods and how to use them in our program with the help of examples&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Abstract Classes<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>An <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract class<&sol;strong><&sol;span> is a class that cannot be instantiated &lpar;we cannot create objects of an abstract class&rpar;&period;<&sol;p>&NewLine;<h5 class&equals;"p1"><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Syntax<&sol;strong><&sol;span><&sol;h5>&NewLine;<p>We use the <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract<&sol;strong><&sol;span> keyword to declare an abstract class&period;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;0000ff&semi;">abstract<&sol;span><&sol;strong> class className &lbrace;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;properties and functions<&sol;strong><&sol;span>&NewLine;&rcub;<&sol;pre>&NewLine;<p>If we try to create objects of an abstract class&comma; we will get a compilation error&period; For example&comma;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class<&sol;span><&sol;strong>&NewLine;abstract class Person &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;class members<&sol;span><&sol;strong>&NewLine; var name&colon; String &equals; "Arun Kumar"&NewLine;&NewLine; fun show&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Name&colon; &dollar;name "&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;creating Person instance<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;error&colon; cannot create an instance of an abstract class<&sol;span><&sol;strong>&NewLine; val person &equals; Person&lpar;&rpar;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p>We can access the members of a class by creating its object or by creating an object of its subclass&period;<&sol;p>&NewLine;<p class&equals;"p1">Abstract classes cannot be instantiated but we can create subclasses from it&period; We can create objects of subclasses to access members of the abstract class&period;<&sol;p>&NewLine;<p class&equals;"p2">Abstract class<span class&equals;"Apple-converted-space">  <&sol;span>is used to define common characteristics of subclasses and the only purpose of the abstract class is to let other sub classes inherit from it&period;<&sol;p>&NewLine;<p class&equals;"p1">Before we learn about it in detail&comma; we need to understand <span style&equals;"color&colon; &num;0000ff&semi;"><strong>abstract members<&sol;strong><&sol;span>&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Abstract Members<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>Abstract classes can contain properties that are not initialized called <strong><span style&equals;"color&colon; &num;008000&semi;">abstract properties<&sol;span><&sol;strong> and methods that contains no implementation &lpar;without any body&rpar; called <strong><span style&equals;"color&colon; &num;008000&semi;">abstract methods<&sol;span><&sol;strong>&period;<&sol;p>&NewLine;<p>We use the same keyword <span style&equals;"color&colon; &num;0000ff&semi;"><strong>abstract<&sol;strong><&sol;span> to create abstract member &lpar;abstract property or abstract function&rpar;&period;<&sol;p>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class<&sol;span><&sol;strong>&NewLine;abstract class Vehicle &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;abstract variable<&sol;span><&sol;strong>&NewLine; abstract var fuel&colon; String <span style&equals;"color&colon; &num;0000ff&semi;"><strong>&sol;&sol;not initialized<&sol;strong><&sol;span>&NewLine;&NewLine; <span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;abstract function<&sol;strong><&sol;span>&NewLine; abstract fun start&lpar;&rpar; <strong><span style&equals;"color&colon; &num;0000ff&semi;">&sol;&sol;no implementation<&sol;span><&sol;strong>&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p class&equals;"p1">An abstract class can contain both abstract and non-abstract members as shown below&colon;<&sol;p>&NewLine;<pre><span style&equals;"color&colon; &num;0000ff&semi;"><strong>abstract<&sol;strong><&sol;span> class Vehicle&lpar;val fuelType&colon; String&rpar; &lbrace; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; non-abstract Property<&sol;span><&sol;strong>&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;0000ff&semi;">abstract<&sol;span><&sol;strong> var fuelCapacity&colon; Int <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; abstract Property<&sol;span><&sol;strong>&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;0000ff&semi;">abstract<&sol;span><&sol;strong> fun start&lpar;&rpar; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; abstract function<&sol;span><&sol;strong>&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;0000ff&semi;">abstract<&sol;span><&sol;strong> fun stop&lpar;&rpar; <strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol; abstract function<&sol;span><&sol;strong>&NewLine;&NewLine; fun park&lpar;&rpar; &lbrace; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; non-abstract function<&sol;span><&sol;strong>&NewLine; println&lpar;"Vehicle is in park mode"&rpar;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;<p><span style&equals;"color&colon; &num;000080&semi;"><strong>Note&colon;<&sol;strong> <&sol;span>Abstract classes and abstract members are always open&period; You do not need to explicitly use <span style&equals;"color&colon; &num;0000ff&semi;"><strong>open<&sol;strong><&sol;span> keyword&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Overriding abstract members<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>An abstract class cannot be instantiated&semi; therefore we must inherit it so that we can access the members of an abstract class&period;<&sol;p>&NewLine;<p class&equals;"p1">When an abstract class is inherited&comma;<&sol;p>&NewLine;<ul>&NewLine;<li class&equals;"p1">To create an object of subclass&comma; we must have to override &lpar;provide implementation to a method already defined in superclass&rpar; all the <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract members <&sol;strong><&sol;span>of super class in our subclass&period;<&sol;li>&NewLine;<li class&equals;"p1">However&comma; if subclass does not implement abstract members&comma; then the subclass must also be declared <strong>abstract <&sol;strong>&lpar;now subclass cannot be instantiated&rpar;&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<h5><strong><span style&equals;"color&colon; &num;0000ff&semi;">Example <&sol;span><&sol;strong><&sol;h5>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class<&sol;span> <&sol;strong>&NewLine;<strong>abstract<&sol;strong> class Person&lpar;val name&colon; String&comma; val rollNo&colon; Int&rpar; &lbrace; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; non-abstract property<&sol;span><&sol;strong>&NewLine; &NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; abstract property &lpar;Must be overridden by Subclasses&rpar;<&sol;span><&sol;strong>&NewLine; <strong>abstract<&sol;strong> var caste&colon; String&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; abstract function &lpar;Must be implemented by Subclasses&rpar;<&sol;span><&sol;strong>&NewLine; <strong>abstract<&sol;strong> fun dateOfBirth&lpar;date&colon; String&rpar;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; non-abstract method<&sol;span><&sol;strong>&NewLine; fun show&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Student Name&colon; &dollar;name"&rpar;&NewLine; println&lpar;"Roll No&colon; &dollar;rollNo"&rpar;&NewLine; println&lpar;"Caste&colon; &dollar;caste"&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;derived class inheriting Person class<&sol;strong><&sol;span>&NewLine;class Student&lpar;name&colon; String&comma; rollNo&colon; Int&rpar; &colon; Person&lpar;name&comma; rollNo&rpar; &lbrace;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;abstract property caste is initialized<&sol;strong><&sol;span>&NewLine; <strong>override<&sol;strong> var caste &equals; "OBC"&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;implementation of abstract function<&sol;strong> <strong>dateOfBirth<&sol;strong><&sol;span>&NewLine; <strong>override<&sol;strong> fun dateOfBirth&lpar;date&colon; String&rpar; &lbrace;&NewLine; println&lpar;"Date of Birth is&colon; &dollar;date"&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine; val student &equals; Student&lpar;"Arun Kumar"&comma; 100&rpar;&NewLine; student&period;show&lpar;&rpar;&NewLine; student&period;dateOfBirth&lpar;"02 July 1995"&rpar;&NewLine;&rcub;<&sol;pre>&NewLine;<h5><strong><span style&equals;"color&colon; &num;0000ff&semi;">Output<&sol;span><&sol;strong><&sol;h5>&NewLine;<pre>Student Name&colon; Arun Kumar&NewLine;Roll No&colon; 100&NewLine;Caste&colon; OBC&NewLine;Date of Birth is&colon; 02 July 1995<&sol;pre>&NewLine;<h5><strong><span style&equals;"color&colon; &num;0000ff&semi;">Example explained<&sol;span><&sol;strong><&sol;h5>&NewLine;<ul>&NewLine;<li>Person is an abstract class which contains abstract members &lpar; <strong><span style&equals;"color&colon; &num;008000&semi;">caste<&sol;span><&sol;strong> <strong>&lpar;property&rpar;<&sol;strong> and <strong><span style&equals;"color&colon; &num;008000&semi;">dateOfBirth <&sol;span>&lpar;function&rpar;<&sol;strong>&rpar; and non-abstract members &lpar; <strong><span style&equals;"color&colon; &num;008000&semi;">name&comma; rollNo<&sol;span><&sol;strong> <strong>&lpar;properties&rpar;<&sol;strong> and <strong><span style&equals;"color&colon; &num;008000&semi;">show <&sol;span>&lpar;function&rpar;<&sol;strong>&rpar;&period;<&sol;li>&NewLine;<li class&equals;"p1"><span style&equals;"color&colon; &num;008000&semi;"><strong>Student<&sol;strong><&sol;span> class is inherited from the super class <span style&equals;"color&colon; &num;008000&semi;"><strong>Person<&sol;strong><&sol;span>&period; The subclass <strong>&lpar;Student&rpar;<&sol;strong><strong> <&sol;strong>overriding the abstract members of the <strong>Person class<&sol;strong>&period;<&sol;li>&NewLine;<li class&equals;"p1">Now creating an instance of subclass we cannot only access its members&comma; but we can also access its superclass<strong>&lpar;Person&rpar;<&sol;strong> members &lpar;abstract and non-abstract&rpar;&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<h3><strong><span style&equals;"color&colon; &num;000080&semi;">Overriding a non-abstract open member with an abstract one<&sol;span><&sol;strong><&sol;h3>&NewLine;<p class&equals;"p1">In Kotlin&comma; we can override the non-abstract open members of the open class with the <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract<&sol;strong><&sol;span> keyword  in the abstract class&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Example<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;open class<&sol;span><&sol;strong>&NewLine;open class Vehicle &lbrace;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;open non-abstract members<&sol;span><&sol;strong>&NewLine; open fun start&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Vehicle is in start mode&period;"&rpar;&NewLine; &rcub;&NewLine;&NewLine; open fun stop&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Vehicle is in stop mode&period;"&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class<&sol;span><&sol;strong>&NewLine;abstract class FourWheeler &colon; Vehicle&lpar;&rpar; &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract functions<&sol;span><&sol;strong>&NewLine; abstract override fun start&lpar;&rpar;&NewLine;&NewLine; abstract override fun stop&lpar;&rpar;&NewLine;&rcub;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Car class inheriting abstract class FourWheeler<&sol;span><&sol;strong>&NewLine;class Car &colon; FourWheeler&lpar;&rpar; &lbrace;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;implementation of abstract function<&sol;strong> <strong>start<&sol;strong><&sol;span>&NewLine; override fun start&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Car is in drive mode&period;"&rpar;&NewLine; &rcub;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;implementation of abstract function<&sol;strong> <strong>stop<&sol;strong><&sol;span>&NewLine; override fun stop&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Car is in stop mode&period;"&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine; val vehicle &equals; Vehicle&lpar;&rpar;&NewLine; vehicle&period;start&lpar;&rpar;&NewLine; val car &equals; Car&lpar;&rpar;&NewLine; car&period;start&lpar;&rpar;&NewLine;&rcub;<&sol;pre>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Output<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre>Vehicle is in start mode&period;&NewLine;Car is in drive mode&period;<&sol;pre>&NewLine;<h3><&sol;h3>&NewLine;<h3><strong><span style&equals;"color&colon; &num;000080&semi;">Creating abstract class reference variable<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>We cannot create instance of abstract class but we can create reference variable of abstract class&period;<&sol;p>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Example<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class<&sol;span><&sol;strong> &NewLine;abstract class Vehicle &lbrace;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;abstract functions<&sol;span><&sol;strong> &NewLine; abstract fun start&lpar;&rpar;&NewLine;&NewLine; abstract fun stop&lpar;&rpar;&NewLine;&rcub;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;Car class inheriting abstract class Vehicle<&sol;strong><&sol;span>&NewLine;class Car &colon; Vehicle&lpar;&rpar; &lbrace;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;implementation of abstract function<&sol;strong> <strong>start<&sol;strong><&sol;span>&NewLine; override fun start&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Car is in drive mode&period;"&rpar;&NewLine; &rcub;&NewLine;&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong> &sol;&sol;implementation of abstract function<&sol;strong> <strong>stop<&sol;strong><&sol;span>&NewLine; override fun stop&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Car is in stop mode&period;"&rpar;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;subclass method<&sol;span><&sol;strong>&NewLine; fun park&lpar;&rpar; &lbrace;&NewLine; println&lpar;"Car is in park mode&period;"&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;error&colon;'Vehicle' is abstract&semi; cannot be instantiated<&sol;span><&sol;strong>&NewLine; <strong>&sol;&sol;Vehicle vehicle &equals; new Vehicle&lpar;&rpar;&semi;<&sol;strong>&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; We can have references of abstract class type&period;<&sol;span><&sol;strong>&NewLine; val car&colon; Vehicle &equals; Car&lpar;&rpar;&NewLine; car&period;start&lpar;&rpar;&NewLine; car&period;stop&lpar;&rpar;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;error&colon; using base class reference variable we can only access its own members&period;<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"><span style&equals;"color&colon; &num;000000&semi;"> &sol;&sol;car&period;park&lpar;&rpar;<&sol;span> &sol;&sol;park is not a function of Vehicle abstract class&period;<&sol;span><&sol;strong>&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Output<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre>Car is in drive mode&period;&NewLine;Car is in stop mode&period;<&sol;pre>&NewLine;<p><span style&equals;"color&colon; &num;000080&semi;"><strong>Note&colon;<&sol;strong> <strong>Using abstract class reference variable we cannot access subclass members&period;<&sol;strong><&sol;span><&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Abstract class Constructor<&sol;strong><&sol;span><&sol;h3>&NewLine;<p class&equals;"p1">An abstract class can contain constructors and it is called when an instance of inherited class is created&period;<&sol;p>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Example<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class primary constructor with initializer block<&sol;span><&sol;strong>&NewLine;abstract class Employee&lpar;name&colon; String&comma; age&colon; Int&rpar; &lbrace;&NewLine;&NewLine; init &lbrace;&NewLine; println&lpar;"My name is &dollar;name&comma; &dollar;age years old "&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;subclass inheriting abstract class Employee<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;subclass primary constructor with initializer block<&sol;span><&sol;strong>&NewLine;class Manager&lpar;name&colon; String&comma; age&colon; Int&comma; salary&colon; Int&rpar; &colon; Employee&lpar;name&comma; age&rpar; &lbrace;&NewLine;&NewLine; init &lbrace;&NewLine; println&lpar;"I am Manager and earning &dollar;salary per month&period;"&rpar;&NewLine; println&lpar;&rpar;&NewLine; &rcub;&NewLine;&NewLine;&rcub;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;creating subclass instance<&sol;span><&sol;strong>&NewLine; Manager&lpar;"Arun"&comma; 40&comma; 90000&rpar;&NewLine;&rcub;<&sol;pre>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Output<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre>My name is Arun&comma; 40 years old &NewLine;I am Manager and earning 90000 per month&period;<&sol;pre>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Example<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre><span style&equals;"color&colon; &num;008000&semi;"><strong>&sol;&sol;abstract class<&sol;strong><&sol;span>&NewLine;abstract class Employee &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;abstract class secondary constructor<&sol;span><&sol;strong>&NewLine; constructor&lpar;name&colon; String&comma; age&colon; Int&rpar; &lbrace;&NewLine; println&lpar;"My name is &dollar;name&comma; &dollar;age years old "&rpar;&NewLine; &rcub;&NewLine;&rcub;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;subclass inheriting abstract class<&sol;span><&sol;strong>&NewLine;class Manager &colon; Employee &lbrace;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;secondary constructor calling abstract class secondary constructor<&sol;span><&sol;strong>&NewLine; constructor&lpar;name&colon; String&comma; age&colon; Int&comma; salary&colon; Int&rpar; &colon; super&lpar;name&comma; age&rpar; &lbrace;&NewLine; println&lpar;"I am Manager and earning &dollar;salary per month&period;"&rpar;&NewLine; println&lpar;&rpar;&NewLine; &rcub;&NewLine;&NewLine;&rcub;&NewLine;&NewLine;fun main&lpar;args&colon; Array&lt&semi;String&gt&semi;&rpar; &lbrace;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;creating subclass instance<&sol;span><&sol;strong>&NewLine; Manager&lpar;"Arun"&comma; 40&comma; 90000&rpar;&NewLine;&rcub;<&sol;pre>&NewLine;<h5><span style&equals;"color&colon; &num;0000ff&semi;"><strong>Output<&sol;strong><&sol;span><&sol;h5>&NewLine;<pre>My name is Arun&comma; 40 years old &NewLine;I am Manager and earning 90000 per month&period;<&sol;pre>&NewLine;<p>Visit <span style&equals;"color&colon; &num;0000ff&semi;"><strong><a style&equals;"color&colon; &num;0000ff&semi;" href&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;kotlin-constructor-in-inheritance&sol;">Kotlin Constructor in Inheritance<&sol;a><&sol;strong><&sol;span> to learn more about Constructor behavior in Inheritance&period;<&sol;p>&NewLine;<h4 class&equals;"p1"><span style&equals;"color&colon; &num;000080&semi;"><b>Points to Remember&colon;<&sol;b><&sol;span><&sol;h4>&NewLine;<ul class&equals;"ul1">&NewLine;<li>To create abstract classes and abstract members we use the <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract<&sol;strong><&sol;span> keyword&period;<&sol;li>&NewLine;<li>Abstract methods have no implementation &lpar;method body&rpar; and abstract properties are not initialized&period;<&sol;li>&NewLine;<li>A class containing abstract member &lpar;abstract property or abstract function &rpar; must be declared as <strong><span style&equals;"color&colon; &num;008000&semi;">abstract<&sol;span>&period;<&sol;strong><&sol;li>&NewLine;<li>An abstract class can contain abstract and non-abstract methods&period;<&sol;li>&NewLine;<li>Abstract classes cannot be instantiated but we can create reference variable of abstract class&period;<&sol;li>&NewLine;<li>Abstract class can have <strong><span class&equals;"s2"><a href&equals;"https&colon;&sol;&sol;c1ctech&period;com&sol;kotlin-constructor&sol;"><span style&equals;"color&colon; &num;008000&semi;">constructors<&sol;span>&period;<&sol;a><&sol;span><&sol;strong><&sol;li>&NewLine;<li class&equals;"li2">The class inheriting the abstract class must either be declared <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract<&sol;strong><&sol;span> or implement abstract members&period;<&sol;li>&NewLine;<li>To create an object of a class that extends abstract class we must have to implement its abstract members in our class&period;<&sol;li>&NewLine;<li>If the class inheriting the abstract class is declared <span style&equals;"color&colon; &num;008000&semi;"><strong>abstract<&sol;strong><&sol;span>&comma; it’s not mandatory to override abstract methods but now we cannot create an instance of subclass&period;<&sol;li>&NewLine;<&sol;ul>&NewLine;<p>&nbsp&semi;<&sol;p>&NewLine;&NewLine;

Exit mobile version