Your SlideShare is downloading. ×
Chapter 8 Inheritance
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

Chapter 8 Inheritance

3,636
views

Published on

Chapter 8 Inheritance …

Chapter 8 Inheritance
Taught by Oum Saokosal, Head of Information Technology, National Polytechnic Institute of Cambodia

Published in: Technology, News & Politics

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,636
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
309
Comments
0
Likes
4
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

Transcript

  • 1. Chapter 8 Inheritance and Polymorphism Oum Saokosal , Head of IT Department National Polytechnic Institute of Cambodia Tel: (855)-12-417214 E-mail: oum_saokosal@yahoo.com
  • 2. Inheritance Chapter 8 Inheritance and Polymorphism
  • 3. Inheritance
    • What is Inheritance?
    • Why Inheritance?
    • How to use it?
    • Superclass & Subclass
    • Using keyword super
    • Overriding Methods
    • The Object class
  • 4. 1. What is Inheritance?
  • 5. 1. What is Inheritance? (1)
    • OOP has 3 features:
      • Class Encapsulation
      • Inheritance
      • Polymorphism
    • OOP allows you to derive (create) new objects from existing classes. E.g.
      • You can create objects from a class:
        • Circle cir = new Circle();
        • Word w = new Word(“N P I C”);
  • 6. 1. What is Inheritance? (2)
    • But OOP has other mechanisms. One of them is called Inheritance .
    • Inheritance is a mechanism to make classes inherit properties/methods from an existing class.
    • Inherit (v) ¬TTYlekrþtMENl¦
    • Inheritance (n) receiving properties
  • 7. 1. What is Inheritance? (3)
    • In fact, every class in Java is always inherited from an existing class, either explicitly or implicitly.
    • In Java, every class is inherited from java.lang.Object .
    • To be clear, please look at an example at next slide.
  • 8. 1. What is Inheritance? (4) - Example
    • Please create a blank class, say, BlankSample
      • public class BlankSample {
      • }
    • Then create a test class, say, TestBlank
      • public class TestBlank {
      • public static void main(String[] args){
      • BlankSample bs = new BlankSample();
      • System.out.print( bs.toString() );
      • }
      • }
    • The question is why we can call bs.toString()?
    • If we look at BlankSample, there is toString(). Why?
  • 9. 1. What is Inheritance? (5) - IDE
  • 10. 1. What is Inheritance? (6)
    • Where these methods come from?
    • They are from java.lang.Object . Because every class in Java inherits from java.lang.Object .
    • To be sure, please look at the API and find out java.lang.Object. Then see its methods.
      • clone(), equals(Object obj), finalize(), getClass(), hashCode(), notify(),
      • notifyAll(), toString() and wait()
  • 11. 2. Why Inheritance?
  • 12. 2. Why Inheritance?
    • Classes often share capabilities
    • We want to avoid re-coding these capabilities
    • Reuse of these would be best to
      • Improve maintainability
      • Reduce cost
      • Improve “real world” modeling
  • 13. 2. Why Inheritance? -Benefits
    • No need to reinvent the wheel.
    • Allows us to build on existing codes without having to copy it and past it or rewrite it again, etc.
    • To create the subclass, we need to program only the differences between the superclass and the subclass that inherits from it.
    • Make class more flexible.
  • 14. 3. How to use it?
  • 15. 3. How to use it? (1)
    • In Java, to enable a class inherit an existing class, we have to use a keyword “ extends ”. For example, we have Circle class:
      • public class Circle{
      • private double radius;
      • public Circle(){}
      • public Circle(double radius){
      • this.radius = radius;
      • }
      • public void setRadius (double radius){
      • this.radius = radius;
      • }
      • public double findArea (){
      • return radius * radius *3.14;
      • }
      • }
  • 16. 3. How to use it? (2)
    • Then we want another class, say, TestCircle , inherits from the Circle class.
      • public class TestCircle extends Circle{
      • public static void main(String[] args){
      • TestCircle tc1 = new TestCircle ();
      • tc1. setRadius (5.0);
      • System.out.println(tc1. findArea ());
      • }
      • }
    • Please note that TestCircle didn’t define setRadius() and getArea() methods but it could use the methods.
    • The reason is TestCircle inherits from Circle class.
  • 17. 3. How to use it? – Note (1)
    • Usually inheritance is used to improve features of an existing class.
    • Please look at the code on page 288, listing 8.1 First Version of the Cylinder class.
      • The Circle has already the findArea()
      • So the formula to find Cylinder’s Volume is :
        • volume = Area * length
  • 18. 3. How to use it? – Note (2)
      • public class Cylinder extends Circle {
      • private double length = 1;
      • public double getLength(){
      • return length;
      • }
      • public void setLength(double length){
      • this.length = length;
      • }
      • public double findVolume(){
      • return findArea() * length;
      • }
      • }
  • 19. 3. How to use it? – Note (3)
      • public class TestCylinder {
      • public static void main(String[] args){
      • Cylinder c1 = new Cylinder();
      • c1. setRadius (2.5); // from Circle
      • c1.setLength(5); // from Cylinder
      • System.out.println(c1.findVolume());
      • }
      • }
    • Please note that the cylinder’s object, c1, could call a method, “ setLength() ”, from Cylinder class and also could call a method, “ setRadius() ”, from Circle class.
  • 20. 4. Superclass & Subclass
  • 21. 4. Superclass & Subclass (1)
    • The cylinder class inherits features from circle class. Then,
      • Cylinder is subclass
      • Circle is superclass
      • Super inherit Subclass
    Circle Cylinder
  • 22. 4. Superclass & Subclass (2)
    • Quick Check:
      • C1 <- C2 <- C3 <- C4
    • What are superclass and subclass?
    • C1 is the superclass of C2, C3, & C4
    • C2 are the subclass of C1 and the superclass of C3 & C4
    • C3 are the subclass of C1 & C2 and the superclass of C4
    • C4 is the subclass of C1, C2 & C3
    • It means if we call the final subclass, e.g. C4, then we can use features from C1, C2, C3, and, of course, C4 itself.
  • 23. 4 . Superclass & Subclass (3) – Java API
    • Please check API Documentation: Javax.swing.JFrame is the subclass of Frame,Window,Container,Component,Object . So if we use JFrame, it means we use features from all of the superclasses.
  • 24. 4. Superclass & Subclass (4)
    • Sample of using JFrame
      • import javax.swing.*;
      • public class TestJFrame extends JFrame {
      • public static void main( String [] args){
      • TestJFrame frame = new TestJFrame();
      • frame .setTitle ( &quot;Hi I am JFrame&quot; );
      • frame .setSize (400,300);
      • frame .setVisible ( true );
      • frame .setDefaultCloseOperation (
      • JFrame.EXIT_ON_CLOSE);
      • }
      • } // Note the underline codes
  • 25. 5. Using keyword super
  • 26. 5. Using keyword super (1)
    • super is used to call:
      • Constructors of the superclass
      • Methods of the superclass
  • 27. Using keyword super (2)
    • To call constructors of the superclass
      • super(); //call no-arg constructor
      • super(5.0); //call arg constructor
    • Note
    • super() :
      • MUST be written in the 1 st line of subclass constructors
      • Cannot be written in other methods
      • Is the only way to call superclass constructor.
  • 28. Using keyword super (3)
    • To call methods of the superclass
      • super.setRadius(5); // setRadius(5);
      • super.findArea();
      • super.toString();
    • Note:
    • This keyword is not always used to call methods from superclass.
    • We can call superclass methods by calling directly the methods name. Please look at slide # 14.
    • However, super is used not to confuse with the name of the overriding methods.
  • 29. 6. Overriding Methods
  • 30. Overriding Methods (1)
    • In the real world:
    • Researchers sometimes never invent or find a new thing. In fact, they just improve an existing thing.
    • To improve the thing, they just:
      • Add new features
      • Modify existing features.
  • 31. Overriding Methods (2)
    • In OOP :
    • It is true to the both things above. The inheritance helps us to do these. We can:
    • 1. Add new methods to existing class
    • 2. Modify the existing features. It is called Overriding Methods .
  • 32. Overriding Methods (3)
    • Overriding method is a technique to modify a method in the superclass.
    • Overriding method is a method, defined in subclass, which has the same name and return type to a method in superclass.
      • For example :
      • - The Circle has findArea() but Cylinder doesn’t has it. If we call findArea() , it is always the Circle ’s.
      • - But the cylinder can have findArea() for itself. This implementation is called overriding method.
  • 33. Overriding Methods (3)
    • Please look at the code on page 292, Listing 8.2.
  • 34. Important Note (1)
    • 1. In the subclass, we can invoke accessible things , e.g. public methods or constructor , from the superclass. E.g.:
    • - After a class inherits JFrame, then we can call setTitle(), setSize(), setVisible() etc.
    • In a constructor of subclass, the non-arg constructor of the superclass is ALWAYS invoked. Let see slide “Important Note (2)”.
    • 3. A subclass can NEVER inherit a superclass which has no non-arg constructor . Let see slide “Important Note (3)”.
  • 35. Important Note (2)
    • // Circle class
    • public class Circle{
    • private double radius;
    • public Circle(){ // non-arg constructor
    • radius = 5;
    • }
    • public double findArea(){
    • return radius * radius * 3.14;
    • }
    • }
    • //Test Circle class
    • public class TestCircle extends Circle {
    • public static void main( String [] args){
    • TestCircle tc = new TestCircle();
    • System .out.println(tc.findArea()); //output: 78.5
    • }
    • }
  • 36. Important Note (3)
    • // Circle class
    • public class Circle{
    • private double radius;
    • //It doesn’t have non-arg constructor Here
    • public Circle(double radius){
    • this. radius = radius;
    • }
    • public double findArea(){
    • return radius * radius * 3.14 ;
    • }
    • }
    • //Test Circle class
    • public class TestCircle extends Circle {
    • public static void main( String [] args){
    • }
    • }
    cannot find symbol symbol: constructor Circle() location: class Circle 1 error
  • 37. The Object class
  • 38. The Object class (1)
    • public boolean equals(Object object)
    • Indicates whether a object is &quot;equal to&quot; this one. E.g.:
      • Circle c1 = new Circle();
      • if(c1.equals(c1)){
      • }
    • Note: We have to override it to test our comparison.
    • public int hashCode()
    • Returns a hash code value for the object. see “Java Collection Framework.”
  • 39. The Object class (2)
    • public String toString()
    • Return a string that represents the object. e.g.
      • Circle c1 = new Circle();
      • c1.toString();
      • //output: Circle@24efe3
    • Note: We have to override it to display our wise.