66
Java Language and OOP Part IV By Hari Christian

04 Java Language And OOP Part IV

Embed Size (px)

DESCRIPTION

04 Java Language And OOP Part IV

Citation preview

Page 1: 04 Java Language And OOP Part IV

Java Language and OOP Part IVBy Hari Christian

Page 2: 04 Java Language And OOP Part IV

Agenda• 01 Enum• 02 Final• 03 Static• 04 Variable Args• 05 Encapsulation• 06 Inheritance• 07 Polymorphism• 08 Interfaces• 09 Abstract Class• 10 Nested class• 11 JAR

Page 3: 04 Java Language And OOP Part IV

Enum

• Old approach

class Bread {

static final int wholewheat = 0;

static final int ninegrain = 1;

static final int rye = 2;

static final int french = 3;

}

int todaysLoaf = Bread.rye;

Page 4: 04 Java Language And OOP Part IV

Enum

• New approach

public enum Bread {

wholewheat,

ninegrain,

rye,

french

}

Bread todaysLoaf = Bread.rye;

Page 5: 04 Java Language And OOP Part IV

Enum

• Enum with Constructorpublic enum Egg {

small(10),

medium(20),

large(30);

Egg(int size) { this.size = size; }

private int size;

// Setter Getter

}

Page 6: 04 Java Language And OOP Part IV

Enum

• Enum with Constructorpublic enum JobCategory {

staff(“Staff”),

nonstaff(“Non Staff”);

JobCategory(String name) { this.name = name; }

private String name;

// Setter Getter

}

Page 7: 04 Java Language And OOP Part IV

Final

• When a reference variable is declared final, it means that you cannot change that variable to point at some other object.

• You can, however, access the variable and change its fields through that final reference variable.

• The reference is final, not the referenced object.

Page 8: 04 Java Language And OOP Part IV

Final

• Example:

void someMethod(final MyClass c, final int a[]) { c.field = 7; // allowed

a[0] = 7; // allowed

c = new MyClass(); // NOT allowed

a = new int[13]; // NOT allowed

}

Page 9: 04 Java Language And OOP Part IV

Static

• Field which is only one copy

• Also called class variable

• What you can make static:

1. Fields

2. Methods

3. Blocks

4. Class

Page 10: 04 Java Language And OOP Part IV

Static - Fields

• Example:

class Employee {

int id; // per-object field

int salary; // per-object field

static int total; // per-class field (one only)

}

Page 11: 04 Java Language And OOP Part IV

Static - Fields

• Example:

class EmployeeTest {

public static void main(String[] args) {

Employee h = new Employee();

h.id = 1;

Employee r = new Employee();

r.id = 2;

Employee.total = 10;

h.total; // 10

r.total; // 10

}

}

Page 12: 04 Java Language And OOP Part IV

Static - Methods

• Also called class method

• Example:

public static int parseInt(String s) {

// statements go here.

}

int i = Integer.parseInt("2048");

Page 13: 04 Java Language And OOP Part IV

Variable Arity – Var Args

• Var Args is optional

• Var Args is an Array

Page 14: 04 Java Language And OOP Part IV

Var Args

public class VarArgs {

public static void main(String[] args) {

sum();

sum(1, 2, 3, 4, 5);

}

public static void sum(int … numbers) {

int total = 0;

for (int i = 0; i < numbers.length; i++) {

total += numbers[i];

}

return total;

}

}

Page 15: 04 Java Language And OOP Part IV

Encapsulation

• Imagine if you made your class with public instance variables, and those other programmers were setting the instance variables directly

public class BadOO {

public int size;

}

public class ExploitBadOO {

public static void main (String [] args) {

BadOO b = new BadOO();

b.size = -5; // Legal but bad!!

}

Page 16: 04 Java Language And OOP Part IV

Encapsulation

• OO good design is hide the implementation detail by using Encapsulation

• How do you do that?– Keep instance variables protected (with an access

modifier, often private)– Make public accessor methods, and force calling

code to use those methods rather than directly accessing the instance variable

– For the methods, use the JavaBeans naming convention of set<someProperty> and get<someProperty>

Page 17: 04 Java Language And OOP Part IV

Encapsulation

• Rewrite the classpublic class GoodOO {

private int size;

public void setSize(int size) {

if (size < 0) this.size = 0; // does not accept negative

else this.size = size;

}

public void getSize() {

return size;

}

}

public class ExploitGoodOO {

public static void main (String [] args) {

GoodOO g = new GoodOO();

g.setSize(-5); // it’s safe now, no need to worry

}

Page 18: 04 Java Language And OOP Part IV

Encapsulation

Page 19: 04 Java Language And OOP Part IV

Inheritance

• A class that is derived from another class is called a subclass (also a derived class, extended class, or child class)

• The class from which the subclass is derived is called a superclass (also a base class or a parent class)

Page 20: 04 Java Language And OOP Part IV

Inheritance

• Every class has one and only one direct superclass (single inheritance), Object

• Classes can be derived from classes that are derived from classes that are derived from classes, and so on, and ultimately derived from the topmost class, Object

Page 21: 04 Java Language And OOP Part IV

Inheritance

• 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 them yourself

Page 22: 04 Java Language And OOP Part IV

Inheritance

• 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

Page 23: 04 Java Language And OOP Part IV

Inheritance

• At the top of the hierarchy, Object is the most general of all classes. Classes near the bottom of the hierarchy provide more specialized behavior

Page 24: 04 Java Language And OOP Part IV

Inheritancepublic class Bicycle { // PARENT or SUPERCLASS

// the Bicycle class has three fields

private int cadence;

private int gear;

private int speed;

// the Bicycle class has one constructor

public Bicycle(int startCadence, int startSpeed, int startGear) {

gear = startGear; cadence = startCadence; speed = startSpeed;

}

// the Bicycle class has two methods

public void applyBrake(int decrement) {

speed -= decrement;

}

public void speedUp(int increment) {

speed += increment;

}

// Setter Getter

}

Page 25: 04 Java Language And OOP Part IV

Inheritancepublic class MountainBike extends Bicycle { // CHILD or SUBCLASS

// the MountainBike subclass adds one field

private int seatHeight;

// the MountainBike subclass has one constructor

public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {

super(startCadence, startSpeed, startGear);

seatHeight = startHeight;

}

// the MountainBike subclass add one method

public void setHeight(int newValue) {

seatHeight = newValue;

}

}

Page 26: 04 Java Language And OOP Part IV

Inheritance

• Has a is a member of class

Example:

class Vehicle {

int wheel;

}

• In above example, Vehicle has a wheel

Page 27: 04 Java Language And OOP Part IV

Inheritance

• Is a is a relation of class

Example:

class Vehicle { }

class Bike extends Vehicle { }

class Car extends Vehicle { }

• In above example,

Bike is a Vehicle

Car is a Vehicle

Vehicle might be a Car, but not always

Page 28: 04 Java Language And OOP Part IV

Polymorphism

• The dictionary definition of polymorphism refers to a principle in biology in which an organism or species can have many different forms or stages

• This principle can also be applied to object-oriented programming and languages like the Java language

• Subclasses of a class can define their own unique behaviors and yet share some of the same functionality of the parent class

Page 29: 04 Java Language And OOP Part IV

Polymorphismpublic class Bicycle { // PARENT or SUPERCLASS

// the Bicycle class has three fields

private int cadence;

private int gear;

private int speed;

// the Bicycle class has one constructor

public Bicycle(int startCadence, int startSpeed, int startGear) {

gear = startGear; cadence = startCadence; speed = startSpeed;

}

// the Bicycle class has three methods

public void printDescription() {

System.out.println(“Gear=" + gear + " cadence=" + cadence + " and speed=" + speed);

}

public void applyBrake(int decrement) {

speed -= decrement;

}

public void speedUp(int increment) {

speed += increment;

}

// Setter Getter

}

Page 30: 04 Java Language And OOP Part IV

Polymorphismpublic class MountainBike extends Bicycle { // CHILD or SUBCLASS

// the MountainBike subclass adds one field

private String suspension;

// the MountainBike subclass has one constructor

public MountainBike(String suspension,int startCadence,int startSpeed,int startGear){

super(startCadence, startSpeed, startGear);

setSuspension(suspension);

}

public void printDescription() { // Override

super. printDescription();

System.out.println("MountainBike has a" + getSuspension());

}

// Setter Getter

}

Page 31: 04 Java Language And OOP Part IV

Polymorphismpublic class RoadBike extends Bicycle { // CHILD or SUBCLASS

// the RoadBike subclass adds one field

private int tireWidth;

// the RoadBike subclass has one constructor

public RoadBike(int tireWidth,int startCadence,int startSpeed,int startGear){

super(startCadence, startSpeed, startGear);

setTireWidth(tireWidth);

}

public void printDescription() { // Override

super. printDescription();

System.out.println(“RoadBike has a" + getTireWidth());

}

// Setter Getter

}

Page 32: 04 Java Language And OOP Part IV

Polymorphismpublic class TestBikes {

public static void main(String[] args) {

Bicycle bike01, bike02, bike03;

bike01 = new Bicycle(20, 10, 1);

bike02 = new MountainBike(20, 10, 5, "Dual");

bike03 = new RoadBike(40, 20, 8, 23);

bike01.printDescription();

bike02.printDescription();

bike03.printDescription();

}}

Page 33: 04 Java Language And OOP Part IV

Interface

• There are a number of situations in software engineering when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts

• Each group should be able to write their code without any knowledge of how the other group's code is written

• Generally speaking, interfaces are such contracts

Page 34: 04 Java Language And OOP Part IV

Interface

• For example, imagine a futuristic society where computer-controlled robotic cars transport passengers through city streets without a human operator

• Automobile manufacturers write software (Java, of course) that operates the automobile—stop, start, accelerate, turn left, and so forth

Page 35: 04 Java Language And OOP Part IV

Interface

• The auto manufacturers must publish an industry-standard interface that spells out in detail what methods can be invoked to make the car move (any car, from any manufacturer)

• The guidance manufacturers can then write software that invokes the methods described in the interface to command the car

Page 36: 04 Java Language And OOP Part IV

Interface

• Neither industrial group needs to know how the other group's software is implemented

• In fact, each group considers its software highly proprietary and reserves the right to modify it at any time, as long as it continues to adhere to the published interface

Page 37: 04 Java Language And OOP Part IV

Interface

public interface OperateCar {

void moveForward();

void applyBrake();

void shiftGear();

void turn();

void signalTurn();

}

Page 38: 04 Java Language And OOP Part IV

Interface

public class Bmw implements OperateCar {

void moveForward() { }

void applyBrake() { }

void shiftGear() { }

void turn() { }

void signalTurn() { }

}

Page 39: 04 Java Language And OOP Part IV

Interface

public class Jeep implements OperateCar {

void moveForward() { }

void applyBrake() { }

void shiftGear() { }

void turn() { }

void signalTurn() { }

}

Page 40: 04 Java Language And OOP Part IV

Abstract Class

• An abstract class is an incomplete class.

• A class that is declared abstract—it may or may not include abstract methods

• Abstract classes cannot be instantiated, but they can be subclassed

Page 41: 04 Java Language And OOP Part IV

Abstract Class

• An abstract method is a method that is declared without an implementation (without braces, and followed by a semicolon), like this:

abstract void moveTo(int x, int y);

• If a class includes abstract methods, then the class itself must be declared abstract, as in:

public abstract class GraphicObject {

abstract void draw();

}

Page 42: 04 Java Language And OOP Part IV

Abstract Class

• When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class

• However, if it does not, then the subclass must also be declared abstract

• Abstract classes are similar to interfaces, we cannot instantiate them

Page 43: 04 Java Language And OOP Part IV

Abstract Class

• However, with abstract classes, you can declare fields that are not static and final, and define public, protected, and private concrete methods

• With interfaces, all fields are automatically public, static, and final, and all methods that you declare or define (as default methods) are public

• In addition, you can extend only one class, whether or not it is abstract, whereas you can implement any number of interfaces

Page 44: 04 Java Language And OOP Part IV

Abstract Class

• First you declare an abstract class, GraphicObject, to provide member variables and methods that are wholly shared by all subclasses. GraphicObject also declares abstract methods for such as draw or resize, that need to be implemented by all subclasses but must be implemented in different ways

Page 45: 04 Java Language And OOP Part IV

Abstract Class

abstract class GraphicObject {

int x, y;

void moveTo(int newX, int newY) { }

abstract void draw();

abstract void resize();

}

Page 46: 04 Java Language And OOP Part IV

Abstract Class

class Circle extends GraphicObject {

void draw() { }

void resize() { }

}

class Rectangle extends GraphicObject {

void draw() { }

void resize() { }

}

Page 47: 04 Java Language And OOP Part IV

Abstract Class

abstract class X implements Y {

// implements all but one method of Y

}

class XX extends X {

// implements the remaining method in Y

}

Page 48: 04 Java Language And OOP Part IV

Nested Class

• The name "nested class" suggests you just write a class declaration inside a class

• Actually, there are four different kinds of nested classes specialized for different purposes, and given different names

Page 49: 04 Java Language And OOP Part IV

Nested Class

• All classes are either:– Top-level or nested– Nested classes are:

• Static classes or inner classes• Inner classes are:

– Member classes or local classes or anonymous classes

Page 50: 04 Java Language And OOP Part IV

Nested Class

• Represents the hierarchy and terminology of nested classes in a diagram

Page 51: 04 Java Language And OOP Part IV

Nested Class – Nested Static

• Example:

class Top {

static class MyNested { }

}

• A static nested class acts exactly like a top-level class

Page 52: 04 Java Language And OOP Part IV

Nested Class – Nested Static

• The only differences are:– The full name of the nested static class

includes the name of the class in which it is nested, e.g. Top.MyNested

– Instance declarations of the nested class outside Top would look like:

Top.MyNested myObj = new Top.MyNested(); – The nested static class has access to all the

static methods and static data of the class it is nested in, even the private members.

Page 53: 04 Java Language And OOP Part IV

Nested Class – Nested Static

class Top {

int i;

static class MyNested {

Top t = new Top();

{

t.i = 3; // accessing Top data

}

}

}

• This code shows how a static nested class can access instance data of the class it is nested within

Page 54: 04 Java Language And OOP Part IV

Nested Class – Nested Static

• Where to use a nested static class:Imagine you are implementing a complicated class. Halfway through, you realize that you need a "helper" type with some utility methods. This helper type is self-contained enough that it can be a separate class from the complicated class. It can be used by other classes, not just the complicated class. But it is tied to the complicated class. Without the complicated class, there would be no reason for the helper class to exist

Page 55: 04 Java Language And OOP Part IV

Nested Class – Nested Static

• Before nested classes, there wasn't a good solution to this, and you'd end up solving it by making the helper class a top-level class, and perhaps make some members of the complicated class more public than they should be

• Today, you'd just make the helper class nested static, and put it inside the complicated class

Page 56: 04 Java Language And OOP Part IV

Nested Class – Inner Class

• Java supports an instance class being declared within another class, just as an instance method or instance data field is declared within a class

• The three varieties of inner class are – Member class– Local class– Anonymous class

Page 57: 04 Java Language And OOP Part IV

Nested Class – Inner Class – Member Class

• Example:

class Top {

class MyMember { }

}

• Member class will have fields and methods

Page 58: 04 Java Language And OOP Part IV

Nested Class – Inner Class – Member Class

public class Top {

int i = 10;

class MyMember {

int k = i;

int foo() {

return this.k;

}

}

void doCalc() {

MyMember m1 = new MyMember();

MyMember m2 = new MyMember();

m1.k = 10 * m2.foo();

System.out.println("m1.k = " + m1.k);

System.out.println("m2.k = " + m2.k);

}

public static void main(String[] args) {

Top t = new Top();

t.doCalc();

}

}

Page 59: 04 Java Language And OOP Part IV

Nested Class – Inner Class – Local Class

public class Top {

void doCalc() {

class MyLocal {

int k = 5;

int foo() {

return this.k * 10;

}

}

MyLocal m = new MyLocal();

System.out.println("m.k = " + m.k);

System.out.println("m.foo = " + m.foo());

}

public static void main(String[] args) {

Top t = new Top();

t.doCalc();

}

}

Page 60: 04 Java Language And OOP Part IV

Nested Class – Inner Class – Anonymous Class

public abstract class MyAbstract {

public abstract void print();

}

public class MyAnonymous {

public static void main(String[] args) {

MyAbstract m = new MyAbstract() {

@override

public void print() {

System.out.println(“TEST”);

}

}

}

}

Page 61: 04 Java Language And OOP Part IV

Nested Class – Inner Class – Anonymous Classpublic class MyAnonymous {

public void print() {

System.out.println(“PRINT IN ANONYMOUS”);

}

}

public class Test {

public static void main(String[] args) {

MyAnonymous m = new MyAnonymous() {

public void print() {

System.out.println(“PRINT IN MAIN”);

}

};

m.print();

}

}

Page 62: 04 Java Language And OOP Part IV

JAR

• JAR = Java Archive

• JAR = Zip File

• To make JAR running, we create a manifest which is the main class to start

Page 63: 04 Java Language And OOP Part IV

JAR

• How to make JAR:

1. Right click in root project

2. Click “Export”

3. Choose “Runnable JAR file”

4. Choose the main class and export destination

5. Finish

Page 64: 04 Java Language And OOP Part IV

JAR

• How to make JAR:

Page 65: 04 Java Language And OOP Part IV

JAR

• How to run JAR:

1. Open command prompt

2. Type “java –jar jartest.jar”

Page 66: 04 Java Language And OOP Part IV

Thank You