Abstract Classes, Abstract Methods, Override Methods

Slides:



Advertisements
Similar presentations
Inheritance - Polymorphism ITI 1121 Nour El Kadri.
Advertisements

OOP: Encapsulation,Abstraction & Polymorphism. What is Encapsulation Described as a protective barrier that prevents the code and data being randomly.
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
Defining Classes Classes, Fields, Constructors, Methods, Properties SoftUni Team Technical Trainers Software University
Design Patterns: Structural Design Patterns General and reusable solutions to common problems in software design Software University
Mocking with Moq Tools for Easier Unit Testing SoftUni Team Technical Trainers Software University
Mocking Unit Testing Methods with External Dependencies SoftUni Team Technical Trainers Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Static Members Static Variables & Methods SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
Encapsulation and Polymorphism
Version Control Systems
Static Members and Namespaces
Databases basics Course Introduction SoftUni Team Databases basics
Sets, Hash table, Dictionaries
C# Basic Syntax, Visual Studio, Console Input / Output
Interface Segregation / Dependency Inversion
OCP and Liskov Principles
Modern Programming Tools And Techniques-I
Introduction to MVC SoftUni Team Introduction to MVC
PHP Fundamentals Course Introduction SoftUni Team Technical Trainers
Reflection SoftUni Team Technical Trainers Java OOP Advanced
Classes, Properties, Constructors, Objects, Namespaces
Mocking tools for easier unit testing
PHP MVC Frameworks MVC Fundamentals SoftUni Team Technical Trainers
OOP Course - Virtual Trip
Processing Sequences of Elements
Inheritance Extending Classes SoftUni Team Technical Trainers Java OOP
Heaps and Priority Queues
Enumerations and Annotations
Repeating Code Multiple Times
Inheritance ITI1121 Nour El Kadri.
Inheritance Class Hierarchies SoftUni Team Technical Trainers C# OOP
Java OOP Overview Classes and Objects, Members and Class Definition, Access Modifier, Encapsulation Java OOP Overview SoftUni Team Technical Trainers.
Databases advanced Course Introduction SoftUni Team Databases advanced
Abstraction, Interface, Inheritance, Polymorphism, Override / Overload
Balancing Binary Search Trees, Rotations
Debugging and Troubleshooting Code
Entity Framework: Relations
Array and List Algorithms
Functional Programming
ASP.NET Razor Engine SoftUni Team ASP.NET MVC Introduction
Processing Variable-Length Sequences of Elements
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Databases Advanced Course Introduction SoftUni Team Databases Advanced
Best practices and architecture
Inheritance and Polymorphism
Arrays and Multidimensional Arrays
Multidimensional Arrays, Sets, Dictionaries
Extending functionality using Collections
Exporting and Importing Data
Functional Programming
C# Advanced Course Introduction SoftUni Team C# Technical Trainers
Exporting and Importing Data
CSS Transitions and Animations
Iterators and Comparators
Reflection SoftUni Team Technical Trainers C# OOP Advanced
Reflection SoftUni Team Technical Trainers C# OOP Advanced
Hibernate (JPA) Code First Entity Relations
Spring Data Advanced Querying
Inheritance and Prototypes
Version Control Systems
Polymorphism, Interfaces, Abstract Classes
/^Hel{2}o\s*World\n$/
Files, Directories, Exceptions
CSS Transitions and Animations
What is Encapsulation, Benefits, Implementation in Java
Multidimensional Arrays
CS 200 More Classes Jim Williams, PhD.
Presentation transcript:

Abstract Classes, Abstract Methods, Override Methods Polymorphism Abstract Classes, Abstract Methods, Override Methods Java OOP Basics SoftUni Team Technical Trainers Software University http://softuni.bg

Table of Contents What is Polymorphism? Types of Polymorphism * Table of Contents What is Polymorphism? Types of Polymorphism Override Methods Overload Methods Abstract Classes Abstract Methods (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*

Questions sli.do #Java-OOP

Polymorphism © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

What is Polimorphism? Polus Morphe From the Greek (many) (shape/forms) Polumorphos Polymorphism is the ability of an object to take on many forms. The most common use of polymorphism in OOP occurs when a parent class reference is used to refer to a child class object. This is something similar to word having several different meanings depending on the context © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Polymorphism in OOP Person IS-A Person Person IS-A Animal Ability of an object to take on many forms public interface Animal {} public abstract class Mammal {} public class Person extends Mammal implements Animal {} Person IS-A Person Person IS-A Animal Person IS-A Mammal Person IS-A Object

Reference Type and Object Type public class Person extends Mammal implements Animal {} Animal person = new Person(); Mammal personOne = new Person(); Person personTwo = new Person(); Reference Type Object Type Variables are saved in reference type You can use only reference methods If you need object method you need to cast it or override it

Keyword - instanceof Check if object is instance of specific class public class Person extends Mammal implements Animal {} Animal person = new Person(); Mammal personOne = new Person(); Person personTwo = new Person(); if (person instanceof Person) { ((Person) person).getSalary(); } if (person.getClass() == Person.class) { Check object type of person Cast to object type and use its methods

Keyword - instanceof (2) Anytime you find yourself writing code of the form "if the object is of type T1, then do something, but if it's of type T2, then do something else", slap yourself. From Effective C++, by Scott Meyers

Types of Polymorphism Runtime polymorphism Compile time polymorphism public class Shape {} public class Circle extends Shape {} public static void main(String[] args) { Shape shape = new Circle() } Method overriding public static void main(String[] args) { int sum(int a, int b, int c) double sum(Double a, Double b) } Method overloading © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Compile Time Polymorphism Also known as Static Polymorphism Argument lists could differ in: Number of parameters. Data type of parameters. Sequence of Data type of parameters. public static void main(String[] args) { static int myMethod(int a, int b) {} static Double myMethod(Double a, Double b) } Method overloading © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Problem: Overload Method * Problem: Overload Method 07/16/96 MathOperation +add(int a, int b): int +add(int a, int b, int c): int +add(int a, int b, int c, int d): int Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 12## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Solution: Overload Method * Solution: Overload Method 07/16/96 public class MathOperation { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; public int add(int a, int b, int c, int d) { return a + b + c + d; Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 13## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Rules for Overloading Method Overloading can take place in the same class or in its sub-class. Constructor in Java can be overloaded Overloaded methods must have a different argument list. Overloaded method should always be the part of the same class (can also take place in sub class), with same name but different parameters. They may have the same or different return types. To pass more specific object to method © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Runtime Polymorphism Using of override method public static void main(String[] args) { Rectangle rect = new Rectangle(3.0, 4.0); Rectangle square = new Square(4.0); System.out.println(rect.area()); System.out.println(square.area()); } Method overriding © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Runtime Polymorphism (2) Also known as Dynamic Polymorphism public class Rectangle { public Double area() { return this.a * this.b; } public class Square extend Rectangle { public Double area() { return this.a * this.a; Demo (look at View -> Notes Page) Method overriding public static void main(String[] args) { Vegetarian babyDeer = new Deer(); Vegetarian babyElephant = new Elephant(); List<Vegetarian> vegetarianAnimals = new ArrayList<>(); vegetarianAnimals.add(babyDeer); vegetarianAnimals.add(babyElephant); } © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Problem: Override Method * Problem: Override Method 07/16/96 Rectangle -Double sideA -Double sideB +Double area() Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. Square +Double area() (c) 2006 National Academy for Software Development - http://academy.devbg.org* 17## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Solution: Override Method * Solution: Override Method 07/16/96 public class Square extends Rectangle { private Double sideA; public Square(Double side) { super(side); this.sideA = side * 2; } public Double perimeter() { return this.sideA * 4; } @Override public Double area() { return this.sideA * this.sideA; } } Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 18## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Rules for Overriding Method Overriding can take place sub-class. Argument list must be the same as that of the parent method The overriding method must have same return type Access modifier cannot be more restrictive Private, static and final methods can NOT be overriden The overriding method must not throw new or broader checked exceptions. To pass more specific object to method © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Live Exercises in Class (Lab) Polymorphism Live Exercises in Class (Lab) © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Abstract Classes © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Abstract Classes Abstract class can NOT be instantiated An abstract class may or may not include abstract methods. If it has at least one abstract method, it must be declared abstract To use abstract class, you need to extend it public abstract class Shape {} public class Circle extends Shape {} Shape shape = new Shape(); // Compile time error Shape circle = new Circle(); // polymorphism

Abstract Classes Elements Public abstract class Shape { private Point startPoint; protected Shape(Point startPoint) { this.startPoint = startPoint; } public getStartPoint() { return this.startPoint; } public abstract void draw(); Can have fields Can have constructor too But they can be subclassed. Can hold methods with code in them Every abstract method MUST be overrided by it's childs © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Problem: Shapes Encapsulate area Rectangle Circle -Double height * Problem: Shapes 07/16/96 Shape Encapsulate area -Double perimeter -Double area +getPerimeter() #setPerimeter(Double area) +calculatePerimeter +calculateArea Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. Rectangle Circle -Double height -Double width -Double height -Double width +calculatePerimeter +calculateArea +calculatePerimeter +calculateArea (c) 2006 National Academy for Software Development - http://academy.devbg.org* 24## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Solution: Shapes protected abstract void calculatePerimeter(); * Solution: Shapes 07/16/96 public abstract class Shape { private Double perimeter; private Double area; protected void setPerimeter(Double perimeter) { this.perimeter = perimeter; } public Double getPerimeter() { return this.perimeter; } protected void setArea(Double area) {this.area = area;} public Double getArea() { return this.area; } protected abstract void calculatePerimeter(); protected abstract void calculateArea(); Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 25## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Solution: Shapes public class Rectangle extends Shape { * Solution: Shapes 07/16/96 public class Rectangle extends Shape { //TODO: Add fields public Rectangle(Double height, Double width) { this.setHeight(height); this.setWidth(width); this.calculatePerimeter(); this.calculateArea(); } //TODO: Add getters and setters @Override protected void calculatePerimeter() { setPerimeter(this.height * 2 + this.width * 2); } protected void calculateArea() { setArea(this.height * this.width); } } Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 26## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Solution: Shapes public class Circle extends Shape{ * Solution: Shapes 07/16/96 public class Circle extends Shape{ private Double radius; public Circle (Double radius) { this.setRadius(radius); this.calculatePerimeter(); this.calculateArea(); } public final Double getRadius() { return radius; } //TODO: Finish encapsulation //TODO: Override calculate Area and Perimeter Extensibility / Polymorphism: New functionality may be easily plugged in without changing existing classes as long the new plug-in classes extend given base classes. Reusability: For a set of similar applications a framework can be defined using a core set of classes that are to be extended by classes that fill in the application-dependent part. Information Hiding: If a more general class using a simpler contract is sufficient, details from extending classes may be hidden to some of the client classes. This allows them to be more independent from possible changes and diminishes the load of contracts that must be understood by a reader of these client classes. (c) 2006 National Academy for Software Development - http://academy.devbg.org* 27## (c) 2005 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.(c) 2006 National Academy for Software Development - http://academy.devbg.org*

Summary What is Polymorphism? Types of Polymorphism Overload Methods * Summary What is Polymorphism? Types of Polymorphism Static polymorphism Dynamic polymorphism Overload Methods Override Methods Abstract Classes Abstract Methods (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*

Inheritance https://softuni.bg/courses/software-technologies © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

License This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license Attribution: this work may contain portions from "Fundamentals of Computer Programming with Java" book by Svetlin Nakov & Co. under CC-BY-SA license "OOP" course by Telerik Academy under CC-BY-NC-SA license © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.

Free Trainings @ Software University Software University Foundation – softuni.org Software University – High-Quality Education, Profession and Job for Software Developers softuni.bg Software University @ Facebook facebook.com/SoftwareUniversity Software University @ YouTube youtube.com/SoftwareUniversity Software University Forums – forum.softuni.bg © Software University Foundation – http://softuni.org This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike license.