Oops - Unit - III
Oops - Unit - III
Run-Time vs Compile-Time
super & this
• Whenever a subclass needs to refer to its
immediate superclass, it can do so by use of
the keyword super.
• super has two general forms :
– The first calls the ‘superclass’ constructor.
– The second is used to access a member of the
superclass that has been hidden by a member of a
subclass.
• We can use this as well as super anywhere
except static area.
This usage has the following general form:
super.member
Here, member can be either a method or an instance variable.
• When a subclass calls super(), it is calling the
constructor of its immediate superclass.
• Thus, super() always refers to the superclass
immediately above the calling class. This is true
even in a multileveled hierarchy.
• Also, super() must always be the first statement
executed inside a subclass constructor.
• super() can also be used to call methods that are
hidden by a subclass.
• Here is given the 6 usage of java this keyword.
– this can be used to refer current class instance
variable.
– this can be used to invoke current class method
– this can be used to invoke current class
constructor.
– this can be passed as an argument in the method
call.
– this can be passed as argument in the constructor
call.
– this can be used to return the current class
instance from the method.
public class ClassB extends ClassA{
public static void main(String[] args) {
ClassB objB = new ClassB();
objB.methX();
}
public void methA()
{ System.out.println("Method-A of Class-B"); }
public void methB()
{ System.out.println("Method B of Class-B"); }
int x = 10;
public static void main(String[] args) {
System.out.println("Method A of Class-A");
}
}
------------------------------------------------------
public class ClassB extends ClassA{
int x = 20;
public static void main(String[] args) {
ClassB objB = new ClassB();
objB.methB();
}
-------------------------------------------------------------------------------------------------------
------------
public class ClassB extends ClassA{
---------------------------------------------------------------------------------------------
public class B extends A{ ERROR
-------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
Access Specifiers
PACKAGE
Class2
meth2()
pkg1a
SubClass
Sub class
subMeth()
package pkg1;
obj1.meth1();
obj2.meth2();
}
Class1.meth1();
Class2.meth2();
sub.subMeth();
}
}
package pkg1.pkg1a;
public class SubClass extends
SuperClass {
Class1
meth1() Class2
meth2()
pkg1a
Super class • public
SuperClass • private
main() • protected
Sub class • default
SubClass
subMeth()
pkg1 pkg2
Class1
meth1() Class2
meth2()
pkg1a
Super class • public
SuperClass • private
main() • protected
Sub class • default
SubClass
subMeth()
pkg1 pkg2
Class1
meth1() Class2
meth2()
pkg1a
Super class • public
public
SuperClass •• private
private
• protected
main() • protected
• default
Sub class • default
SubClass
subMeth()
pkg1 pkg2
Class1
meth1() Class2
meth2()
pkg1a
Super class • public
SuperClass • private
main() • protected
Sub class • default
SubClass
subMeth()
pkg1 pkg2
Class1
meth1() Class2
meth2()
pkg1a
Super class • public
SuperClass • private
main() • protected
Sub class • default
SubClass
subMeth()
INTERFACES
&
Abstract Classes
INTERFACES
{ // code }
}
public class Circle {
public static void main(String[] args)
{ // code }
public void area()
{ // code }
}
-------------------------------------------------
public class Rectangle {
public static void main(String[] args)
{ // code }
public void area()
{ // code }
}
-------------------------------------------------
public class Polygon extends Circle, Rectangle {
public static void main(String[] args)
{ // code }
public void area() //which superclass method will be Overridden ??
{ // code }
}
public interface ClassA {
public static void main(String[] args)
{ // code }
public void methA() ;
}
-------------------------------------------------------
public interface ClassB {
public static void main(String[] args)
{ // code }
public void methA() ;
}
------------------------------------------------------
public class ClassC implements ClassA, ClassB {
public static void main(String[] args)
{ // code }
public void methA() //which superclass method will be Overridden ??
{ // code }
}
Defining an Interface
An interface is defined much like a class.
This is a simplified general form of an interface:
access interface name {
return-type method-name1(parameter-list);
return-type method-name2(parameter-list);
type final-varname1 = value;
type final-varname2 = value;
//...
return-type method-nameN(parameter-list);
type final-varnameN = value;
}
• Java does not support MULTIPLE
Classes but it supports MULTIPLE
Interfaces.
interface A {
void meth1();
void meth2();
}
interface B extends A {
void meth3();
}
// This class must implement all of A and B
class MyClass implements B {