Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
INHERITANCE -This feature allows one class to specialize the state and behavior of another class. -Significant code reuse can be achieved by this technique. -The extends keyword is used to establish inheritance relationship. Subclasses :It allows one class to reuse the functionality provided by its superclasses. Class clsName2 extends clsName1 { //class body } Here, clsName2 is a subclass of clsName1. clsName1 is the superclass of clsName2. If the extends clause is omitted from the declaration of a class, the java compiler assumes that object is its superclass. A class may directly extend only one superclass. It may have several subclasses. Each of those subclasses may itself have several subclasses. class X { } class X1 extends X { } class X2 extends X { } class X11 extends X1 { } class X12 extends X1 { } class X21 extends X2 { } class X22 extends X2 { } class InheritanceHierarchy { public static void main(String args[]) { X x; System.out.println("Instantiating X"); x = new X(); System.out.println("Instantiating X1"); x = new X1(); System.out.println("Instantiating X11"); x = new X11(); System.out.println("Instantiating X12"); x = new X12(); System.out.println("Instantiating X2"); x = new X2(); System.out.println("Instantiating X21"); x = new X21(); System.out.println("Instantiating X22"); x = new X22(); } } Output :- Instantiating x Instantiating x1 Instantiating x11 Instantiating x12 Instantiating x2 Instantiating x21 Instantiating x22 Inheritance and variables :A static or instance variable in a subclass may have the same name as a superclass variable. In that case, the variable hides the superclass variable. These two variables may have same types or different types. It is possible to access a hidden variable by using the super keyword. super.varName Here varName is the name of the variable in the superclass. This syntax may be used to read or write the hidden variable. You may not use expressions such as “super.super.varName” to access a hidden variable two levels up in the inheritance hierarchy. class W { float f; } class X extends W { StringBuffer sb; } class Y extends X { String s; } class Z extends Y { Integer i; } class Wxyz { public static void main(String args[]) { Z z = new Z(); z.f = 4.567f; z.sb = new StringBuffer("abcde"); z.s = "Java"; z.i = new Integer(41); System.out.println("z.f = " + z.f); System.out.println("z.sb = " + z.sb); System.out.println("z.s = " + z.s); System.out.println("z.i = " + z.i); } } Output :z.f = 4.567 z.sb = abcde x.s = Java z.I=41 class E { int x; } class F extends E { String x; } class Ef { public static void main(String args[]) { F f = new F(); f.x = "This is a string"; System.out.println("f.x = " + f.x); E e = new E(); e.x = 45; System.out.println("e.x = " + e.x); } } Output :- f.x = This is a string e.x = 45 Variable hiding also applies for static variables. class P { static int x; } class Q extends P { static String x; } class Pq { public static void main(String args[]) { P p = new P(); p.x = 55; System.out.println("p.x = " + p.x); Q q = new Q(); q.x = "This is a string"; System.out.println("q.x = " + q.x); }} p.x = 55 q.x= “This is a string” How to access hidden variables via the super keyword. class M100 { int i = 100; } class M200 extends M100 { int i = 200; void display() { System.out.println("i = " + i); System.out.println("super.i = " + super.i); } } class SuperKeyword { public static void main(String args[]) { M200 m200 = new M200(); m200.display(); }}Output :- I = 200 super.I = 100 Method Overriding :- It occurs when a class declares a method that has the same type signature as a method declared by one of its superclasses. When a method in a subclass overrides a method in a superclass, the method in the superclass is hidden relative to the subclass object. It forms the basis for runtime polymorphism. The signature of the method defines the interface, and each overridden version provides a unique implementation. The java compiler issues an error message if a method overrides another method but has a different return type. class A1 { void hello() { System.out.println("Hello from A1"); }} class B1 extends A1 { void hello() { System.out.println("Hello from B1"); }} class C1 extends B1 { void hello() { System.out.println("Hello from C1"); }} class MethodOverriding1 { public static void main(String args[]) { C1 obj = new C1(); obj.hello(); }} Output Hello from C1 Inheritance and Methods :- What if you want to access the functionality present in the superclass version of an overridden method? To access a superclass method use the super keyword super.mthName(args) Here, mthName is the name of the superclass method and args is its optional argument list. class I1 { void hello(String s) { System.out.println("I1: " + s); } } class J1 extends I1 { void hello(String s) { super.hello(s); System.out.println("J1: " + s); }} class K1 extends J1 { void hello(String s) { super.hello(s); System.out.println("K1: " + s); }} class SuperForMethods1 { public static void main(String args[]) { System.out.println("Instantiating I1"); I1 obj = new I1(); obj.hello("Good morning"); System.out.println("Instantiating J1"); obj = new J1(); obj.hello("Good afternoon"); System.out.println("Instantiating K1"); obj = new K1(); obj.hello("Good evening"); }} Output : Instantiating I1 I1 : Good morning Instantiating j1 I1 : Good afternoon J1 : Good afternoon Instantiating k1 I1 : Good evening J1 : Good evening K1 : Good evening Inheritance & Constructors :It is not sufficient to execute a constructor only for one class. A constructor for each superclass must also be executed. A superclass constructor must execute before a subclass constructor. This is necessary so the state and behavior defined by the superclass may be correctly and completely initialized before a subclass constructor executes. The super keyword is used to explicitly invoke a superclass constructor. Super(args); Here, args is the optional list of arguments for the superclass constructor. A constructor can invoke another constructor in the same class. This(args); If you use this form, it must appear as the first statement of the constructor. Therefore, a given constructor cannot use both super() and this(). Default constructor has no arguments. The java compiler assumes that the first line of every constructor is an implicit call to the default superclass constructor unless you explicitly use super() or this() to request different behavior. class S1 { int s1; S1() { System.out.println("S1 Constructor"); s1 = 1; } } class T1 extends S1 { int t1; T1() { System.out.println("T1 Constructor"); t1 = 2; } } class U1 extends T1 { int u1; U1() { System.out.println("U1 Constructor"); u1 = 3; } } class InheritanceAndConstructors1 { public static void main(String args[]) { U1 u1 = new U1(); System.out.println("u1.s1 = " + u1.s1); System.out.println("u1.t1 = " + u1.t1); System.out.println("u1.u1 = " + u1.u1); } } S1 constructor T1 constructor U1 constructor u.s1=1 u.t1=2 u.u1=3 Superclass constructor executes before the subclass constructor. Explicit use of super() in an inheritance hierarchy. class S2 { int s2; S2(int s2) { this.s2 = s2; } } class T2 extends S2 { int t2; T2(int s2, int t2) { super(s2); this.t2 = t2; } } class U2 extends T2 { int u2; U2(int s2, int t2, int u2) { super(s2, t2); this.u2 = u2; } } class InheritanceAndConstructors2 { public static void main(String args[]) { U2 u2 = new U2(1, 2, 3); System.out.println("u2.s2 = " + u2.s2); System.out.println("u2.t2 = " + u2.t2); System.out.println("u2.u2 = " + u2.u2); } } U2.s2=1 U2.t2=2 U2.u2=3 Class Modifiers :- abstract - cannot be instantiated final – cannot be extended public – can be accessed by any other class. If this keyword is missing, access to the class is limited to the current package. Abstract class is used to declare functionality that is implemented by one or more subclasses. The advantage of such a design is that the abstract class specifies what functionality is provided but not how that functionality is provided. Therefore, the subclasses may use different implementations to achieve the same objective. Abstract class shape. Declares a display() method that displays the shape on a monitor. The implementation of this method cannot be provided by shape. Instead, it must be provided by the individual subclasses of shape. For e.g. subclasses such as circle, rectangle and triangle. abstract class Shape { void display() { } } class Circle extends Shape { void display() { System.out.println("Circle"); } } class Rectangle extends Shape { void display() { System.out.println("Rectangle"); } } class Triangle extends Shape { void display() { System.out.println("Triangle"); } } class AbstractClassDemo { public static void main(String args[]) { Shape s = new Circle(); s.display(); s = new Rectangle(); s.display(); s = new Triangle(); s.display(); } } Circle Rectangle Triangle Variable Modifiers :- Final – is a constant Private – can be accessed only by code in the same class Protected – can be accessed only by code in a subclass or the same package Public – can be accessed by any other class Static – is not an instance variable Transient – is not part of the persistent state of this class Volatile – cam change unexpectedly Constructor Modifiers :Private – can be invoked only by code in the same class Protected – can be invoked only by code in a subclass or the same package. Public – can be invoked by any other class class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } private Person() { } }class PrivateConstructor { public static void main(String args[]) { // Public constructor may be invoked Person p1 = new Person("John", 30); System.out.println(p1.name); System.out.println(p1.age); // Private constructor may not be invoked // Person p2 = new Person(); } } John 30 Method Modifiers :Abstract – is not implemented by this class Final – may not be overridden Native – the method is implemented in the machine code used by the host cpu, not using java bytecodes. Private – can be invoked only by code in the same class Protected – can be invoked only by code in a subclass or the same package Public – can be invoked by any other class Static – is not an instance variable Synchronized – acquires a lock when it begins execution The class jetplane declares one abstract method named numEngines(). Therefore, the class itself must be declared abstract. abstract class JetPlane { abstract int numEngines(); } class DC8 extends JetPlane { int numEngines() { return 4; } } class DC10 extends JetPlane { int numEngines() { return 3; } } class JetPlanes { public static void main(String args[]) { System.out.println(new DC8().numEngines()); System.out.println(new DC10().numEngines()); } } 4 3 Interfaces A class may implement several interfaces. An interface name can be used as the type of a variable. The variable can then reference any object that implements that interface. It is possible for an interface to extend another interface. An interface may extend several other interfaces. An interface is a group of constants and method declarations that define the form of a class. It provides no implementation for its methods. Interface declaration intfModifier interface intfName{ varModifier1 type1 varName1 = value1; … varModifierN typeN varNameN = valueN; mthModifier1 rtype1 mthName1(params1); … mthModifierN rtypeN mthNameN(paramsN); The keyword interface indicates that an interface named intfName is being declared. A class can implement one or more interfaces. It first includes an implements clause in its class definition that specifies the interface(s) being implemented. It provides implementations for all of the methods specified by the interface(s) . Syntax of implements clause: clsModifiers class clsName extens superName implements intfList( // provide implementations for interfaces } The keyword implements indicates that this class implements one or more interfaces, The names of these interfaces are included in intfList and are separated by commas. interface Shape2D { double getArea(); } interface Shape3D { double getVolume(); } class Point3D { double x, y, z; Point3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } } abstract class Shape { abstract void display(); } class Circle extends Shape implements Shape2D { Point3D center, p; // p is any point on the circumference Circle(Point3D center, Point3D p) { this.center = center; this.p = p; } public void display() { System.out.println("Circle"); } public double getArea() { double dx = center.x - p.x; double dy = center.y - p.y; double d = dx * dx + dy * dy; double radius = Math.sqrt(d); return Math.PI * radius * radius; } } class Sphere extends Shape implements Shape3D { Point3D center; double radius; Sphere(Point3D center, double radius) { this.center = center; this.radius = radius; } public void display() { System.out.println("Sphere"); } public double getVolume() { return 4 * Math.PI * radius * radius * radius / 3; } } class Shapes { public static void main(String args[]) { Circle c = new Circle(new Point3D(0, 0, 0), new Point3D(1, 0, 0)); c.display(); System.out.println(c.getArea()); Sphere s = new Sphere(new Point3D(0, 0, 0), 1); s.display(); System.out.println(s.getVolume()); } } Circle 3.141593653589793 Sphere 4.1887902047863905 The following example shows an interface that defines a set of constants. Interface Material defines a set of string constants for various materials. Abstract class MaterialObject has one instance variable names material of type string. This records the material used to construct that object. Classes Ball, Coin and Ring extend MaterialObject. The constructors initialize the material variable. Class MaterialObjects instantiate these three classes. A different material is passed to each constructor, The material of each object is displayed. interface Material { String bronze = "bronze"; String gold = "gold"; String marble = "marble"; String silver = "silver"; String wood = "wood"; } abstract class MaterialObject { String material; } class Ball extends MaterialObject { Ball(String material) { this.material = material; } } class Coin extends MaterialObject { Coin(String material) { this.material = material; } } class Ring extends MaterialObject { Ring(String material) { this.material = material; } } class MaterialObjects { public static void main(String args[]) { Ball ball = new Ball(Material.wood); Coin coin = new Coin(Material.silver); Ring ring = new Ring(Material.gold); System.out.println(ball.material); System.out.println(coin.material); System.out.println(ring.material); } } Output : Wood Silver Gold Interface References :- We can specify an interface name as the type of a variable. The variable can then reference any object that implements that interface. The compiler issues an error message if you assign an object to the variable that does not implement that interface. We can access interface variables and methods according to the following syntax. intfRef.varName intfRef.mthName(args) Only variables and methods defined by the interface can be accessed relative to intfRef. How to declare and use an interface reference variable. Interface A declares a display() method. Classes C1, C2 and C3 implement that method. The main() method declares variable a of type A. It can hold a reference to any object that implements interface A. This is demonstrated by creating objects of class C1, C2 and C3 and invoking the display() method relative to the interface reference. interface A { void display(String s); } class C1 implements A { public void display(String s) { System.out.println("C1: " + s); }} class C2 implements A { public void display(String s) { System.out.println("C2: " + s); } }class C3 implements A { public void display(String s) { System.out.println("C3: " + s); } }class InterfaceReferenceVariable { public static void main(String args[]) { A a; a = new C1(); a.display("String 1"); a = new C2(); a.display("String 2"); a = new C3(); a.display("String 3"); } } Output : C1: String 1 C2: String 2 C3: String 3 Interface Inheritance :An interface extends one or more interfaces via the following syntax. intfModifier interface intfName extends intfList { //interface body } intfModifier is an optional interface modifier. The name of the interface is intfName. The extends clause declares that this interface extends one or more interfaces. These are known as superinterfaces an are listed by name in intfList separated by commas. If a variable with the same name is declared in more than one superinterface, this represents an ambiguity. The compiler generates an error message if that variable is used. Methods with the same signature may be declared by more than one superinterfadce. Those methods must have the same return type, otherwise compiler issues an error message. Interface L extends interfaces J and K. Class I implements interface L. Therefore, it must provide implementations of all methods defined by interfaces J, K and L. interface J { int j = 200; int j1(); } interface K { double k1(); } interface L extends J, K { boolean l1(); } class I implements L { public int j1() { return 4; } public double k1() { return 6.8; } public boolean l1() { return true; } } class InterfaceInheritance { public static void main(String args[]) { I i = new I(); System.out.println(i.j); System.out.println(i.j1()); System.out.println(i.k1()); System.out.println(i.l1()); } } Output: 200 4 6.8 True The instanceof Operator :- If an object is of a particular class or implements a specific interface. The instanceof operator can be used for this purpose, using the following syntax varName instanceof type varName is an object reference variable and type is the name of either a class or an interface. The expression evaluates to true if varName is a type. Otherwise, it evaluates false. Example :Instance of operator to test if an object is of a particular class. The abstract class Fish declares one abstract method named display(). It also has two abstract subclasses named FreshWaterFish and SaltWaterFish. Some concrete subclasses are defined. The main method creates an array of type Fish. Different types of fish are instantiated and assigned to the elements of this array. A loop then iterates through these elements. The instanceof operator is used to identify if a fish is of type SaltWaterFish. The display method is called only for saltriver fish. abstract class Fish { abstract void display(); } abstract class FreshWaterFish extends Fish { } abstract class SaltWaterFish extends Fish { } class Trout extends FreshWaterFish { void display() { System.out.println("Trout"); } } class Flounder extends SaltWaterFish { void display() { System.out.println("Flounder"); } } class Tuna extends SaltWaterFish { void display() { System.out.println("Tuna"); } } class InstanceofClass { public final static int NUMFISH = 4; public static void main(String args[]) { // Create an array of fish Fish fishes[] = new Fish[NUMFISH]; // Create objects fishes[0] = new Trout(); fishes[1] = new Flounder(); fishes[2] = new Tuna(); fishes[3] = new Trout(); // Demonstrate instanceof operator for(int i = 0; i < NUMFISH; i++) { Fish fish = fishes[i]; if(fish instanceof SaltWaterFish) { fish.display(); } } } } Output : Flounder Tuna Packages :- A package is a group of classes and interfaces. You can assign the classes and interfaces in a source file to a particular package by using a package statement with the following syntax: Package packageName; packageName is the name of the package. If a source file does not contain a package statement, its classes and interfaces are placed in a default package. If a package statement is used, it must appear as the first statement in that source file. Also, a maximum of one package statement may appear in a file. If these rules are violated, a compiler error results. A package name can be a simple identifier that follows the java naming conventions Package engineering; It is also possible to organize packages in hierarchical manner. In this case, packageName would be a sequence of package names each separated by period. package.engineering.electrical.signals; The engineering package contains a package named electrical. The electrical package contains a package names signals. The java class libraries are organized into packages. Some of these are listed in the following table: java.applet , java.awt, java.awt.event, java.io, java.lang, java.net, java.util Example :This illustrates how the classes defined in four separate source files can be grouped into one package named p. The source code for p\PackageDemo.java is shown in the following listing. An object of class A is created and method a1() is called. Similarly, objects of classes B and C are created and methods are invoked on those objects. Packagedemo.java package p; class PackageDemo { public static void main(String args[]) { A a = new A(); a.a1(); B b = new B(); b.b1(); C c = new C(); c.c1(); } } a.java package p; class A { void a1() { System.out.println("a1"); }} b.java package p; class B { void b1() { System.out.println("b1"); }} c.java package p; class C { void c1() { System.out.println("c1"); } } These four files are all in the same directory. To build this package, we must change to the parent directory of p and issue the following command. javac p\*.java The .class files created by this command are placed in the sub-directory p. To execute this application, remain in the parent directory of p and issue the following command. Java p.PackageDemo Output: a1 b1 c1 The import Statement :Java.awt.event. This package defines the class MouseEvent. To access class MouseEvent, you can refer to that type as java.awt.event.MouseEvent. Frequent use of fully qualified type names can be laborious. Therefore, the import statement is provided for your convenience. It has two forms provided below Import fullyQualifiedTypeName; Import packageName.*; The first form allows you to used a simple name for the class or interface given as fullyQualifiedTypeName. The second form allows you to used simple names for the types in the package named packageName. The source code for q\ImportDemo.Java is shown below, It begings with a package statement that places the types defined in this file into a package named q. The next two import statements allow us to used abbreviated names for the available types defined in packages r and s. ImportDemo.java package q; import r.*; import s.*; class ImportDemo { public static void main(String args[]) { R r = new R(); r.r1(); S s = new S(); s.s1(); } } The source code for r\R.java is shown in the following listing. It begins with a package statement that places the class defined in this file into a package named r. R\r.java package r; public class R { public void r1() { System.out.println("r1"); } } The source code for s\s.java is shown in the following listing. It begins with a pakcage statement that places the class defined in this file into a package named s. S\s.java package s; public class S { public void s1() { System.out.println("s1"); } } To build these three packages, we must change to our parent directories and issue the following commands: javac q\*.java javac r\*.java javac s\*.java The .class files created by these commands are placed in the appropriate subdirectories. To execute application, we must remain in the parent directory of q and issue the following command. Java q.ImportDemo Output : r1 s1 1. Display Maximum value , Minimum Value , Size the primary data types ( byte, short, int, long, float & double) 2. Create a Class which provides the basic arithmetic operations. 3. Make a program which accept the N students information (No., Name, Marks of three subjects ) & generate the mark sheet for the given student number. 4. Make a Point2D class for the 2D co-ordinates. Specify two Constructor. Also two move methods that change the position of a point. Create class Circle which Inherits the Point2D class. Accept the value of two point & find the area of circle. [ Radius = (y2 – y1 ) 2 + ( x2-x1 ) 2 , One point must be a center i.e. ( 0 , 0 ) ] 5. Program which accept the birth date & return the age. 6. Create an interface for the stack operations ( Push , Pop , Peep , Change ). Create a FixedStack and GrawStack classes that implement the interface. Also both class contain the Display method. 7. The Shape2D Interface declares getArea() method. It is implemented by Square , Rectangle , Triangle , Circle. The Shape3D Interface declares getVolume() method. It is implemented by Sphere , Cylinder. The Ashape abstract class declares the display() , getData() method. Find out the Area & Volume of the particular class. 9. Create a package of name MathFun , Which contain the following classes. ( Sqrt , Factorial , Cube , Maximum , Minimum ) . Also create a Package for Shape2D and utilize both package in Package Pdemo. Exceptions :- An exception is an object that is generated at run time to describe a problem encountered during the execution of a program. Some causes for an exception are integer division-by-zero, array index negative or out of bounds, end of file condition, missing file, incorrect number format. Exception Handling :- Arithmetic exception when an integer division-by-zero is attempted. class DivideByZero { public static void main(String args[]) { a(); } static void a() { b(); } static void b() { c(); } static void c() { d(); } static void d() { int i = 1; int j = 0; System.out.println(i/j); } } Output: Java.lang.ArithmeticException: / by zero at DivideByZero.d(DevideByZero.java: 22) at DivideByZero.c(DevideByZero.java: 16) at DivideByZero.b(DevideByZero.java: 12) at DivideByZero.a(DevideByZero.java: 8) at DivideByZero.main(DevideByZero.java: 4) At line 22 the arithmetic exception object was generated.It was handled by the default exception handling mechanism. Information about the exception is displayed and execution of the application is stopped. The main() invoked a(). Method a() invoked b(). Method b() invoked c(). Method c() invoked d(). Each time one method invokes another method, an activation frame is placed on the stack. This is necessary so that the processor can correctly return from a method to its caller. The java language allows us to handle exception that occur during execution of a program. This is done by a following syntax: Try{ //try block } Catch(ExceptionType1 param1) { //exception handling block } Catch(ExceptionType2 param2) { //exception handling block } Catch(ExceptionTypeN paramN) { //exception handling block } Finally { //finally block } The try statement contains a block of statements enclosed by braces. This is the code you want to monitor for exceptions. If a problem occurs during its execution, an exception is thrown. Immediately the try block is sequence of catch blocks. Each of these begins with the catch keyword. An argument is passed to each catch block. That argument is the exception object that contains information about the problems.