Your SlideShare is downloading. ×
Object Oriented Programming with Java
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Object Oriented Programming with Java

7,651
views

Published on

Published in: Technology, Sports

1 Comment
6 Likes
Statistics
Notes
No Downloads
Views
Total Views
7,651
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
447
Comments
1
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Exercise 01
  • Exercise 2
  • Exercise 3
  • Exercise 4 and 5
  • Exercise 6 - 8
  • Exercises 9 – 12
  • Exercise 15 - 17
  • Exercises 13,14 and 18
  • Transcript

    • 1. Object Orientated Programming with Java Jussi Pohjolainen Tampere University of Applied Sciences
    • 2. MOTIVATION
    • 3. Job Opportunities?
      • Little acronyms from job descriptions:
        • S60, C++, J2ME, Java, Java EE, SCRUM, JAX-WS 2.0, EJB 3.0, Spring, Hybernate, Struts, SQL, XHTML, CSS, Symbian C++, Perl, PHP, Python, LDAP, MFC, XML, .NET, Visual Basic, AJAX, Objective-C, JSP, Servlet, GTK, Qt, JavaScript, Oracle, SQL Server, DB Design…
      • Where is Object Orientated programming?
    • 4. Developing S60 apps? “ Basic” programming skills OO skills Data Structures / DB UI programming Symbian C++ S60
    • 5. Developing iPhone apps? “ Basic” programming skills OO skills Data Structures / DB UI programming Objective-C iPhone
    • 6. Web-development with Java? “ Basic” programming skills OO skills Data Structures /DB UI programming Java Servlet Www-techniques: Xhtml, CSS, XML Applets JSP
    • 7. OO CONCEPTS
    • 8. Intro to OO
      • Object Orientated programming is a programming paradigm.
      • One way of describing the structure of the application
      • Several paradigms available.
        • Procedural, Functional, ...
      • OO is nowdays one of the most popular.
        • C++
        • Java
        • C#
        • PHP 5
        • ...
    • 9. Benefits
      • Reusability
        • Once you written code, you can reuse it!
      • Management
        • Application is programmed using classes and objects. Pieces that communicate with each other.
      • Maintanence
        • When changing the code, it does not influence the whole application.
    • 10. Basic Concept: Object
      • In real life, the world consists of objects:
        • cars, buildings, trees, ships, humans, flowers..
      • Every object has actions (=methods!) that can incluence other objects
        • jack drives ferrari.
        • Object jack has a method drive that influences some way to object ferrari.
        • jack.drive(ferrari);
      • In OO, you should implement the app so that it consists of objects that influence each other!
    • 11. Example about an Object
      • Datsun 100A is an object
      • Datsun 100A has different actions or methods : drive, brake, park...
      • Datsun 100A has information or attributes : color, amount of gears, amount of doors...
    • 12. Basic Concept: Class
      • Class is a blueprint or template of an object
      • Class describes the state and behaviour to it's objects.
      • Object is created from the class.
    • 13. Example about an Class
      • If Datsun 100A is an object, Car is a class.
      • If one wants to create Datsun 100A, you have to have first the blueprints of the Datsun.
      • Blueprints of an object: Class
      • Class Car -> Object Datsun 100A
    • 14. Examples: Class to Object Class Object Car datsun 100a Human Jack Bauer Color red Laptop MacBook Pro String "some string" Array {1,2,3,2,4} ... ...
    • 15. Class and Object
      • Car - class
      Datsun 100A Lamborghini Diablo Peugeot 406
    • 16. Car's Blueprint
      • When building a Car's blueprint (class), you have to think that what is similar in all car's
      • So what is similar in datsun, lamborghini and peugeot?
    • 17. Objects datsun, lambo, peugeot
      • datsun:
        • brand: Datsun 100A , motor: 1.0, fuzzy dices: yes, color: red
      • lambo
        • brand: Lamborghini Diablo, motor: 8.0, fuzzy dices: no, color: punainen
      • peugeot
        • brand: Peugeot 406, motor: 2.2, fuzzy dices: no, color: blue
    • 18. Car's Blueprint (Class) in UML Car brand motor amountOfDoors color hasFuzzyDices . .
    • 19. From Class to Object datsun Datsun 100A 1.0 3 red true lambo Lamborghini Diablo 8.0 3 red false Car brand motor amountOfDoors color hasFuzzyDices . .
    • 20. Car-class, extension Car brand motor amountOfDoors color hasFuzzyDices drive park brake
    • 21. Class
      • Class is a template or blueprint to object
      • Class holds
        • Attributes (=variables)
        • Actions (=methods)
      • Class instances are called objects
    • 22. CLASSES AND OBJECTS IN JAVA
    • 23. Person Class to Objects george George Smith 40 Teacher 09-12345 Jack Jack Puupää 60 Toimistopäällikkö 03-654321 eat sleep drinkBeer Person firstname lastname age profession phonenumber eat sleep drinkBeer
    • 24. Person – class to Java
      • class Person {
      • public String firstname;
      • public String lastname;
      • public int age;
      • public String profession;
      • public int phonenumber;
      • public void eat() {
      • System.out.println("Eating!");
      • }
      • public void sleep() {
      • System.out.println("Sleeping!");
      • }
      • public void drinkBeer() {
      • System.out.println("Drinking!");
      • }
      • }
      Person firstname lastname age profession phonenumber eat sleep drinkBeer
    • 25. From Class to Object
      • App always starts from the main-method
      • Let's test the Person – class
      • This creates a variable a which type is integer
        • int a;
      • This creates a object jack which type is Person
        • Person jack;
    • 26. From Class to Object
      • class Person {
      • ....
      • }
      • class JustTesting {
      • public static void main(String [] args)
      • {
      • // Declare the object
      • Person jack;
      • // Initialize the object
      • jack = new Person();
      • jack.firstname = "Jack";
      • jack.lastname = "Smith";
      • jack.drinkBeer();
      • }
      • }
    • 27. Example: Car - class
      • class Car
      • {
      • public String brand;
      • public int amountOfGas;
      • public void drive() {
      • amountOfGas--;
      • }
      • }
    • 28. Creating Objects From the Class
      • class Car {
      • ....
      • }
      • class JustTesting {
      • public static void main(String [] args)
      • {
      • Car datsun = new Car();
      • datsun.amountOfGas = 100;
      • datsun.drive();
      • System.out.println(datsun.amountOfGas);
      • Car ferrari = new Car();
      • ferrari.amountOfGas = 300;
      • ferrari.drive();
      • System.out.println(ferrari.amountOfGas);
      • }
      • }
    • 29. Basic Concept - Encapsulation private public method
    • 30. About Attributes
      • Attributes are usually marked as private
      • The reason for this is that other objects cannot change the values as they will
      • You don't for example want that every object in the world can change person's weight to 500kg...
    • 31. Example: Person - class
      • class Person {
      • private String name;
      • private int weight;
      • }
    • 32.
      • class Person {
      • private String name;
      • private int weight;
      • }
      • class JustTesting {
      • public static void main(String [] args)
      • {
      • Person jack = new Person();
      • jack.name = "Jack Smith";
      • jack.weight = 500;
      • }
      • }
      • RESULT:
      • TB308POHJUS-L-2:temp pohjus$ javac Person.java
      • Person.java:9: name has private access in Person
      • jack.name = "Jack Smith";
      • ^
      • Person.java:10: weight has private access in Person
      • jack.weight = 500;
      • ^
      • 2 errors
    • 33.
      • class Person {
      • private String name;
      • private int weight;
      • public void setName(String n) {
      • name = n;
      • }
      • public String getName() {
      • return name;
      • }
      • public void setWeight(int w) {
      • if(w > 0 && w <= 150)
      • weight = w;
      • }
      • public int getWeight() {
      • return weight;
      • }
      • }
      • class JustTesting {
      • public static void main(String [] args)
      • {
      • Person jack = new Person();
      • jack.setName(&quot;Jack Smith&quot;);
      • jack.setWeight(200);
      • System.out.println(jack.getName());
      • }
      • }
    • 34. Accessor and Mutator - methods
      • class Person {
      • private String name;
      • private int weight;
      • // Mutator
      • public void setName(String n) {
      • name = n;
      • }
      • // Accessor
      • public String getName() {
      • return name;
      • }
      • // Mutator
      • public void setWeight(int w) {
      • if(w > 0 && w <= 150)
      • weight = w;
      • }
      • // Accessor
      • public int getWeight() {
      • return weight;
      • }
      • }
    • 35. JAVA TYPES
    • 36. Java Types
      • Java has two type of types
      • 1) Primitive types
        • byte, short, int, long, double, float, char, boolean
      • 2) Class types
        • String, Scanner, Array, JButton, JFrame ...
    • 37. Differences
      • Primitive types are spelled with lowercase:
        • int, double, float...
      • Class types are spelled with uppercase
        • String, Scanner, Person, Cat, Car ...
      • Primitive type declaring and initialization
        • int a = 5;
      • Class type declaring and initialization with new
        • Dog spot = new Dog();
    • 38. Differences
      • Primitive type
        • int a = 5;
      • Class type
        • int [] b= new int[5];
      • b holds memory address
      • a holds value 5.
    • 39. Memory Address?
      • int [] b = new int[2];
      • b[0] = 1;
      • b[1] = 2;
      • // prints 0x01
      • System.out.println(b);
      RAM variable b address value 0x01 1 0x02 2 address value 0x09 0x01
    • 40. Memory Address?
      • int [] b = new int[2];
      • b[0] = 1;
      • b[1] = 2;
      • int [] a = b;
      • // prints 0x01
      • System.out.println(b);
      • // prints 0x01
      • System.out.println(a);
      RAM variable b variable a address value 0x01 1 0x02 2 address value 0x09 0x01 address value 0x19 0x01
    • 41. Output?
      • int [] b = new int[2];
      • b[0] = 1;
      • b[1] = 2;
      • int [] a = b;
      • b[0] = 99;
      • // Output?
      • System.out.println(a[0]);
    • 42. Differences Again
      • Primitive type
        • int a = 5;
      • Class type
        • int [] b= new int[5];
      • b holds memory address
      • a holds value 5.
    • 43. Differences Again
      • Primitive type
        • int a = 5;
      • Class type
        • Person jack = new Person()
      • jack holds memory address
      • a holds value 5.
    • 44. Output?
      • Person jack = new Person();
      • jack.setName(&quot;Jack Smith&quot;);
      • Person james = jack;
      • james.setName(&quot;James Bond&quot;);
      • // output?
      • System.out.println(jack.getName());
    • 45. Methods and Variables
      • public void method(int x) {
      • x++;
      • }
      • public void main(String [] args) {
      • int y = 3;
      • method(y);
      • // Output is 3!
      • System.out.println(y);
      • }
    • 46. Methods and Variables
      • public void method(int [] x) {
      • x[0] = 12;
      • }
      • public void main(String [] args) {
      • int [] y = {1,2,3};
      • method(y);
      • // Output is 12 since array is class type!
      • System.out.println(y[0]);
      • }
    • 47. String
      • String is an exception to the rules
      • String is a class type that acts like primitive type
      • String is the only class type that can be initialized without the new word.
        • String a = &quot;hello&quot;;
      • String is passed by value in methods, so String is copied when moving strings in methods.
    • 48. String and Memory
      • String variables are objects => holds memory address.
      • Comparing contents
        • a.equals(b);
      • Comparing memory addresses
        • a == b
    • 49. CONSTRUCTOR
    • 50. Constructors
      • Constructor is a “init method” that is called when an object is created
      • Java provides default constructor (= constructor with no parameters)
      • Constructor has the same name than the class
      • Constructor does not return anything
      • Constructor usually initalizes class members
    • 51. Example
      • class Car {
      • public Car() {
      • System.out.println(&quot;Constructor!&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Car datsun = new Car();
      • }
      • }
      > java Test Constructor!
    • 52.
      • class Car {
      • private String brand;
      • public Car(String b) {
      • brand = b;
      • }
      • public String getBrand() {
      • return brand;
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Car datsun = new Car(&quot;Datsun 100A&quot;);
      • System.out.println( datsun.getBrand() );
      • }
      • }
      > java Test Datsun 100A
    • 53. Multiple Constructors
      • class Car {
      • public Car() {
      • // Do something
      • }
      • public Car(String brand) {
      • // Do something else
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Car datsun = new Car();
      • Car ferrari = new Car(&quot;Ferrari&quot;);
      • }
      • }
    • 54. Problem?
      • class Car {
      • String brand;
      • public Car(String brand) {
      • brand = brand;
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Car datsun = new Car(&quot;Datsun 100a&quot;);
      • }
      • }
      > java Test null
    • 55. Solution
      • class Car {
      • String brand;
      • public Car(String brand) {
      • this.brand = brand;
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Car datsun = new Car(&quot;Datsun 100a&quot;);
      • }
      • }
      > java Test Datsun 100a
    • 56. COMPOSITION
    • 57. Composition
      • Relatioship between objects, where one object owns, or has the other object
      • Car has or owns Motor
      • When Car is build, it's motor is built also
      • When Car is destroyed it's motor is destroyed
    • 58. UML notation
    • 59. Java: Composition
      • // Composition
      • class Car
      • {
      • private Motor motor;
      • public Car() {
      • motor = new Motor();
      • }
      • }
    • 60. One to Many?
    • 61. Java: One to Many
      • class Department
      • {
      • private Professor [] members;
      • private int numberOfMembers;
      • public Department(Professor prof) {
      • members = new Professor[20];
      • members[0] = prof;
      • numberOfMembers = 1;
      • }
      • public void addProfessor(Professor prof) {
      • members[numberOfMembers] = prof;
      • numberOfMembers++;
      • }
      • }
    • 62. INHERITANCE
    • 63. Introduction to Inheritance
      • Inheritance is a relationship between two or more classes where derived class inherites behaviour and attributes of pre-existing (base) classes
      • Intended to help reuse of existing code with little or no modification
    • 64. Inheritance
      • Inheritance can be continous
        • Derived class can inherit another class, which inherits another class and so on
        • When changing the base class all the derived classes changes also
      • Example:
        • Mammal <– Human <– Worker <- Programmer
      • Could mammal be a derived class? If so, what would be the base class?
    • 65. Picture about Inheritance C lass B F eatures: a,b,c C lass D F eatures: a,b,d,e,f a b C lass A features: a,b c d e C lass C F eatures: a,b,d,e f
    • 66. Multiple Inheritance
      • In multiple inheritance a derived class has multiple base classes
      • C++ supports multiple base classes, Java don't
      Driver - license - Y ear of approval Conductor - A ccount number Taxi Driver - area House Boat Houseboat
    • 67. Inheritance and Capsulation
      • private
        • Is accessible only via the base class
      • public
        • Is accessible everywhere (base class, derived class, othe classes)
      • protected
        • Is accessible by the base class and derived classes
    • 68. Basic example
      • What are Programmer's attributes and methods?
      Human string name void sleep() void drink() void eat() Programmer int salary void implementApps() void beNerd()
    • 69. Overriding?
      • What about now?
      Human string name void sleep() void drink() void eat() Programmer int salary void implementApps() void beNerd() void drink() void eat()
    • 70. Overriding
      • Since programmer eats and drinks differently than humans (only Coke and Pizza) the eat and drink methods are overriden in Programmer!
    • 71. Abstract Class
      • Abstract class is a class which you cannot instantiate (create objects)
      • You can inherit abstract class and create objects from the inherited class, if it is concrete one
      • Abstract class in C++ has abstract methods, that do not have implementations
      • These methods forces derived classes to implement those methods
    • 72. Example <<abstract>> Mammal string name void makesound() {abstract} Elephant int trunkLength makesound()
    • 73. Example <<abstract>> Figure int x, y double calculateArea() {abstract} Circle double radius double calculateArea() Rect double length, height double calculateArea()
    • 74. INHERITANCE IN JAVA
    • 75. Example: Basic Inheritance
      • class Human {
      • public void sleep() {
      • System.out.println(&quot;Human sleeps&quot;);
      • }
      • }
      • class Programmer extends Human {
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • jussi.sleep(); // &quot;Human sleeps&quot;
      • }
      • }
    • 76. Example: Overriding
      • class Human {
      • public void sleep() {
      • System.out.println(&quot;Human sleeps&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public void sleep() {
      • System.out.println(&quot;Programmer sleeps&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • jussi.sleep(); // &quot;Programmer sleeps&quot;
      • }
      • }
    • 77. Example: super
      • class Human {
      • public void sleep() {
      • System.out.println(&quot;Human sleeps&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public void sleep() {
      • super.sleep();
      • System.out.println(&quot;Programmer sleeps&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • jussi.sleep();
      • }
      • }
      > java Test Human sleeps Programmer sleeps
    • 78. Constructors and Inheritance
      • class Human {
      • public Human() {
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
      > java Test Human Programmer
    • 79. Constructors and Inheritance
      • Constructor allways calls the base classes constructor!
      • When creating a constructor
        • void Human() {
        • }
      • Java adds super() – call to it:
        • void Human() {
        • super(); // calls base classes constructor
        • }
    • 80.
      • class Human {
      • public Human() {
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
      > java Test Human Programmer
    • 81.
      • class Human {
      • public Human() {
      • super(); // Java adds this! Calls base classes contructor
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • super(); // Java adds this! Calls base classes contructor
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
      > java Test Human Programmer
    • 82. What the...? What base class?
      • class Human {
      • public Human() {
      • // Java adds this! Calls base classes contructor
      • super();
      • System.out.println(&quot;Human&quot;);
      • }
      • }
    • 83. Object
      • Every class derives from a class called Object.
      • // Java adds the extends Object too!
      • class Human extends Object {
      • public Human() {
      • super();
      • System.out.println(&quot;Human&quot;);
      • }
      • }
    • 84. Object clone() equals() finalize() toString() ... Human String name ... http://java.sun.com/javase/6/docs/api/java/lang/Object.html
    • 85.
      • class Human {
      • public Human( int a ) {
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
      > javac Test.java > DOES NOT COMPILE!!! Why?
    • 86.
      • class Human {
      • public Human( int a ) {
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • super(); // Java adds this and it calls constructor
      • // Human() that does not exist..
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
    • 87.
      • class Human {
      • public Human( int a ) {
      • System.out.println(&quot;Human&quot;);
      • }
      • }
      • class Programmer extends Human {
      • public Programmer() {
      • super(5); // Now it works: Human(int a) exists.
      • System.out.println(&quot;Programmer&quot;);
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer();
      • }
      • }
    • 88.
      • class Human {
      • private String name
      • public Human( String name ) {
      • this.name = name;
      • }
      • }
      • class Programmer extends Human {
      • private int salary;
      • public Programmer(String name, int salary) {
      • super(name);
      • this.salary = salary;
      • }
      • }
      • class Test {
      • public static void main(String [] args) {
      • Programmer jussi = new Programmer(&quot;Jussi&quot;, 5000);
      • }
      • }
    • 89. Abstract Class
      • From abstract class you cannot create objects!
      • Abstract class is usually used with inheritance
      • Abstract class may contain abstract methods.
      • Abstract method forces derived classes to implement the abstract method.
    • 90. Abstract Class: example
      • abstract class Mammal {
      • abstract void makeSound();
      • }
      • class Dog extends Mammal {
      • // You have to implement this!
      • public void makeSound() {
      • System.out.println(&quot;Bark!&quot;);
      • }
      • }
    • 91. Abstract Class: example
      • // Does NOT work, since Mammal is
      • // abstract class
      • Mammal object = new Mammal();
      • // Does work
      • Dog spot = new Dog();
    • 92. Java: Abstract class and Interface
      • Abstract class can hold &quot;normal&quot; methods and abstract methods.
      • Interface holds only abstract methods
      • Abstract class:
        • class A extends someAbstractClass
      • Interface
        • class A implements someInterface
    • 93. Abstract class to Interface
      • abstract class Movable {
      • abstract public void start();
      • abstract public void stop();
      • }
      • interface Movable {
      • public void start();
      • public void stop();
      • }
    • 94. Implementing the Interface
      • interface Movable {
      • public void start();
      • public void stop();
      • }
      • class Car implements Movable {
      • // You have to implement these
      • public void start() {
      • // Do something
      • }
      • public void stop() {
      • // Do something
      • }
      • }
    • 95. Abstract class vs Interface
      • Abstract class can hold normal methods and abstract methods
      • Interface can hold only abstract methods
      • Class can inherite only one base class
      • Class can implement several interfaces!
    • 96.
      • class Car extends Vehicle implements Movable, RunsOnGasoline {
      • // You have to implement these
      • public void start() {
      • // Do something
      • }
      • public void stop() {
      • // Do something
      • }
      • public void reduceGasoline() {
      • // Do something
      • }
      • public void addGasoline() {
      • // Do something
      •   }
      • }
    • 97. POLYMORPHISM
    • 98. int as parameter
      • class Exercise13 {
      • public static void main(String [] args) {
      • int x = 4;
      • myMethod(x);
      • }
      • public static void myMethod(int a) {
      • }
      • }
    • 99. Human parameter
      • class Human {
      • }
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • myMethod(jack);
      • }
      • public static void myMethod(Human a) {
      • }
      • }
    • 100. Mammal parameter
      • class Mammal {
      • }
      • class Human extends Mammal {
      • }
      • class Dog extends Mammal {
      • }
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • Dog spot = new Dog();
      • Mammal mammal = new Mammal();
      • // these work! You can pass mammals, dogs and humans to the method!
      • myMethod(jack);
      • myMethod(dog);
      • myMethod(mammal);
      • }
      • public static void myMethod(Mammal a) {
      • }
      • }
    • 101. Object parameter
      • ...
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • Dog spot = new Dog();
      • Mammal mammal = new Mammal();
      • // these work! You can pass every object to the method
      • myMethod(jack);
      • myMethod(dog);
      • myMethod(mammal);
      • myMethod(&quot;hello&quot;); // String
      • }
      • public static void myMethod(Object a) {
      • }
      • }
    • 102. Calling methods from Mammal
      • class Mammal {
      • }
      • class Human extends Mammal {
      • public void bark() { System.out.println(&quot;Bark!&quot;); };
      • }
      • class Dog extends Mammal {
      • }
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • Dog spot = new Dog();
      • Mammal mammal = new Mammal();
      • myMethod(jack);
      • myMethod(dog);
      • myMethod(mammal);
      • }
      • public static void myMethod(Mammal a) {
      • a.bark(); // Why this does not work?
      • }
      • }
    • 103. Solution
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • Dog spot = new Dog();
      • Mammal mammal = new Mammal();
      • myMethod(jack);
      • myMethod(dog);
      • myMethod(mammal);
      • }
      • public static void myMethod(Mammal a) {
      • // Now it works
      • if(a instanceof Dog) {
      • Dog spot = (Dog) a;
      • spot.bark();
      • }
      • }
      • }
    • 104. This works, why?
      • class Mammal {
      • public void giveBirth() { System.out.println(&quot;Giving birth&quot;); };
      • }
      • class Human extends Mammal {
      • }
      • class Dog extends Mammal {
      • }
      • class Exercise13 {
      • public static void main(String [] args) {
      • Human jack = new Human();
      • Dog spot = new Dog();
      • Mammal mammal = new Mammal();
      • myMethod(jack);
      • myMethod(dog);
      • myMethod(mammal);
      • }
      • public static void myMethod(Mammal a) {
      • a.giveBirth(); // Why this works?
      • }
      • }
    • 105.
      • class Movable {
      • public void start();
      • public void stop();
      • }
      • class Vehicle {
      • }
      • class Car extends Vehicle implements Movable {
      • public void start() {
      • // Do something
      •   }
      • public void stop() {
      • // Do something
      •   }
      • }
      • class Exercise13 {
      • public static void main(String [] args) {
      • Car c = new Car();
      • myMethod(c);
      • }
      • // You can pass every object that implements the Movable!
      • public static void myMethod( Movable a ) {
      • a.start();
      • }
      • }

    ×