250 likes | 357 Views
IS F213 Object Oriented Programming. Dr. Yashvardhan Sharma CSIS Dept., BITS-Pilani. DEFINING A CLASS. SYNTAX. <scope> [<final>/<abstract>] [static>] class <classname> [extends <classname> ] [implements <interfacename 1> …….<interface n> ] {
E N D
IS F213 Object Oriented Programming Dr. Yashvardhan Sharma CSIS Dept., BITS-Pilani
DEFINING A CLASS SYNTAX <scope> [<final>/<abstract>] [static>] class <classname> [extends <classname>] [implements <interfacename 1> …….<interface n>] { Member Variable declarations /Instance field declarations; Member Method Definitions; } Class Body <scope> : 1. package private or public for outer classes 2. private , public , protected, package private for inner classes <final> : class definition is final and can not be extended by sub classes. final class can not have sub classes <static> : static keyword can only be applied for inner classes. Outer classes can not be static. <abstract> : abstract keyword specifies that class is abstract.
Instance Variable Declaration Syntax <scope> [<final>] [<static>] <type> variable name = [value]; where <scope> can beprivate, public, protected or by default friendly <type > can be any primitive type or class type or interface type; Method Declaration Syntax <scope> [<final>][<static> ][<synchronized>] [abstract] <return type> methodname( argument list ) [throws exceptiontype1..exceptiontype n] { ….. Method Body…… } Where <scope> can beprivate, public, protected or by default friendly <return type > can be any primitive type or class type or interface type; Note : Default Access is always friendly. i.e. inside the package
Class Examples • 1. • class xyz • { …….. } // class is defined with friendly access • 2. • public class abc • { ……...} // class is defined with public access. • Note : • public classes should be written in the same file as name of class. • public class abc should be written in file named abc.java. • In a single source file only one class can be named with public access. • 3. final class xyz • { …………} • final class means you can not create sub classes of the final class. • class abc extends xyz • { ……….} is wrong.
Class Examples • 4. • abstract class xyz • { …….. } // class is defined with friendly access • abstract classes needs to be subclassed. • You can not create instances of abstract classes. • xyz x1 = new xyz(); -------- Wrong Statement. • abstract class abc • { • int a =10; • float b = 20; • abstract void show() ; // abstract method • }
Exercise 1 Define a class which encapsulates a point in 2 – dimensional space. It has following members X & Y coordinate values. It supports following operations • Individual operation for setting the values for X and Y coordinates • Computing the distance between two points • Checking two points for equality [ Two points are equal if they have same values for X and Y coordinates] • Method for translating the values for X and Y
Point x: double y: double +getX() : double +getY() : double +setX(x: double) : void +setY(y: double) : void +equals(other : Point) : boolean +computeDistance(other : Point) : double +show() : void UML Representation for Class Point class Point { double x; // x – coordinate double y; // y –coordinate public double getX() { return x; } public double getY() { return y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public boolean equals(Point other) { return this.x == other. x && this.y == other.y ; } public double computeDistance(Point other) { double a = (this.y – other.y) * (this.y – other.y); double b = this.x – other.x) * (this.x – other.x); return Math.sqrt(a+b); } Attributes Operations public void show() { S.O.P(“ x= “+x); S.O.P(“ y= “+y); } } End of Point Class
Class PointTest class PointTest { public static void main(String args[ ]) { Point P1 = new Point(); P1.show(); Point P2 = P1; P2.show(); System.out.println(P1.equals(P2)); System.out.println(P1.computeDistance(P2)); }// End of main() Method }// End of PointTest
How to Create an Instance of a class (Creating Objects) Objects are always created/constructed/instantiated dynamically using new opeartor. Syntax : <ClassName> <object reference> = new ConstructorMethod(<parameters>); Constructor Method Method having same name as name of class Examples : BOX b1 = new BOX(); // Valid iff constructor is unparametrized BOX b2 = new BOX(10,6,8); // Valid iff constructor is parametrized
BOX l b h b1 Object Creation Examples BOX b1 = new BOX(); BOX b2 = b1; b2 b2 is just another reference for the same object ONLY ONE OBJECT IS CREATED IN ABOVE STATEMENTS
How to Access Class members • Private members of a class are only visible inside class body. • Protected members have package scope and are accessible to subclasses in other packages as well. • private protected members are only accessible to subclasses in same package or other package. [Does not have Package Scope] • public fields/methods are accessible from every where. • Every access to public or friendly access fields of class is only through objects of that class. (Except static fields which are accessible through class name) Syntax. <object_reference>.<member_field> ; <object_reference>.<methodname(parameter_list)>;
Example class RectangleTest { public static void main(String args[]) { Rectangle r1 = new Rectangle(); r1.setData(10,8); r1.printSides(); System.out.println("Area ="+r1.area()); Rectangle r2 = new Rectangle(); r1.setData(100,80); r1.printSides(); System.out.println("Area ="+r2.area()); } } // End of class class Rectangle { int length; int width; void setData(int l,int w) { length = l; width = w; } void printSides() { System.out.println("Length is:"+length); System.out.println("Width is:"+width); } int area() { return length * width ;} } // End of class /* Output E:\New Folder\Java>java RectangleTest Length is:10 Width is:8 Area =80 Length is:100 Width is:80 Area =0 */
class RectangleTest { public static void main(String args[]) { Rectangle r1 = new Rectangle(); r1.printSides(); r1.setData(10,8); System.out.println("Area ="+r1.area()); Rectangle r2 = new Rectangle(); r2.printSides(); r1.setData(100,80); System.out.println("Area ="+r2.area()); } } class Rectangle { int length; int width; void setData(int l,int w) { length = l; width = w; } void printSides() { System.out.println("Length is:"+length); System.out.println("Width is:"+width); } int area() { return length * width ;} } /* E:\New Folder\Java>java RectangleTest Length is:0 Width is:0 Area =80 Length is:0 Width is:0 Area =0 */
Constructors • If a class has any method with the same name as its class then it is constructor method for that class • Used to initialize the objects upon creation • In the absence of constructor method we have to specifically add a method for object initialization • If no constructor is defined for the class then a default constructor is provided by Java run time environment (Without Parameters). • Constructor method has no return type not even void. • Code written inside constructor method is automatically executed for every object creation of that class.
Types of Constructors • Unparametrized Constructor • Parametrized Constructor • Overloaded Constructor
Unparametrized Constructor • If a class does not supply any constructor then JRE supplies a default constructor with no parameters • Class can have its own constructor of any types. • If a class supplies its own constructor then default constructor becomes hidden.
Class With No Constructor class XYZ { double a,b; void setData(double x, double y) { a = x; b = y; } void print() { System.out.println("a="+a); System.out.println("b="+b); } } class XYZTEST { public static void main(String args[]) { XYZ xyz = new XYZ(); xyz.print(); } } D:\Java1>java XYZTEST a=0.0 b=0.0
Class With Constructor class XYZ { double a,b; XYZ() { S.O.P(“Object XYZ created”); } } class XYZTEST { public static void main(String args[]) { XYZ xyz = new XYZ(); } } D:\Java1>java XYZTEST Object XYZ created Class with Unparametrized Constructor
Class with Parametrized Constructor class XYZTEST { public static void main(String args[]) { // XYZ xyz = new XYZ(); Wrong XYZ xyz = new XYZ(10.8,6.5); xyz.print(); } } class XYZ { double a,b; XYZ(double a, double b) { this.a = a; this.b = b; print(); } void print() { System.out.println("a="+a); System.out.println("b="+b); } } D:\Java1>java XYZTEST a=10.8 b=6.5 a=10.8 b=6.5
Class with Overloaded Constructor class XYZ { double a,b; XYZ() { a = 10; b = 8; print(); } XYZ(double a, double b) { this.a = a; this.b = b; print(); } void print() { System.out.println("a="+a); System.out.println("b="+b); } } class XYZTEST { public static void main(String args[]) { XYZ x1 = new XYZ(); XYZ x2 = new XYZ(10.8,6.5); x1.print(); x2.print(); } } D:\Java1>java XYZTEST a=10.0 b=8.0 a=10.8 b=6.5 a=10.0 b=8.0 a=10.8 b=6.5
Constructor Examples(Parametrized Constructor) • class Triangle • { • double side1,side2,side3; • Triangle(double side1,double side2,double side3) • { • this.side1 = side1; • this.side2 = side2; • this.side3 = side3; • System.out.println ("Triangle Created with sides :"+side1 +" " +side2+ " "+side3); • } • } class TriangleTest { public static void main(String args[]) { // Triangle t1 = new Triangle(); This Line will give compile time error Triangle t1 = new Triangle(10.56,4.56,3.45); Triangle t2 = new Triangle(10,4,9); Triangle t3 = new Triangle(1,4,3); } }
/* Out Put E:\New Folder\Java>javac TriangleTest.java E:\New Folder\Java>java TriangleTest Triangle Created with sides :10.56 4.56 3.45 Triangle Created with sides :10.0 4.0 9.0 Triangle Created with sides :1.0 4.0 3.0 */
Overloaded Constructors • class Triangle • { • double side1,side2,side3; • Triangle(double side) • { • side1= side2 = side3 = side; • System.out.println("Equilateral Triangle Created with sides :"+side); • } • Triangle(double side1,double side2) • { • this.side1 = side1; this.side2 = this.side3 = side2; • System.out.println("Isoceles Triangle Created with sides :"+side1 +" " +side2); • } • Triangle(double side1,double side2,double side3) • { • this.side1 = side1; this.side2 = side2; this.side3 = side3; • System.out.println("Triangle Created with sides :"+side1 +" " +side2+ " "+side3); • } • }
class TriangleTest { public static void main(String args[]) { Triangle t1 = new Triangle(10.56,4.56,3.45); Triangle t2 = new Triangle(10,4); Triangle t3 = new Triangle(13); } } /* Output E:\New Folder\Java>java TriangleTest Triangle Created with sides :10.56 4.56 3.45 Isoceles Triangle Created with sides :10.0 4.0 Equilateral Triangle Created with sides :13.0 */