Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, Perl, PHP, Lua, etc.
Abstract classes, Interfaces, PHP and Java

Abstract classes, Interfaces, PHP and Java


When you design code for a number of different similar type of thing (object types, classes) you don't start from scratch in each case - you define a base class which contains all the common code, and you then create subclasses by extending the original. You say that the subclass extends the base class, and you write the extension in a separate piece of source code. That way, you only have one set of fundamentals (i.e. one base class) to maintain into the future, and subclasses in which you only have to maintain the bits that are different in the subclass to the base class.

Two further steps.

1. Sometimes, you'll never actually want to create objects the are in the base class directly. My board example here shows a base class of "animal", but we never have just an animal ... we have a pet, a farm animal, a wild animal, a zoo animal, a mythical animal ... all of which are based on animals but have slight differences in some of the ways we handle them in our code. Indeed, for certain object behaviours (for example, if we call up the value of an object) there won't be common routines - they will always be in the subclasses; this lack of any method at all in the base class means that we can't actually create just an "animal" object, since it would be incomplete - there would be no way of getting back its value.

When you define an incomplete base class that you don't want people to initialize directly, and you want to require any subclass to provide one or more methods of a specific name, you can (PHP) or must (Java) declare that base class as abstract and you can (PHP) must (Java) also declare as abstract members all the things your subclasses are required to provide.

2. There will be times that you want all classes in a certain group that you create to have certain behaviours - certain methods - even through you don't want to inherit any underlying code at all from a base class. For example, you could have a whole lot of different types of objects being insurable, but no common code used for defining any of the data about that, such as terms and conditions and what the risks insured against are. If you want to use such a common way of talking to very different classes, you can (PHP) must (Java) declare an interface (like a skeleton class with no code, just a list of needed methods) and then say that your (sub)classes implement that interface.


Using Abstract classes and interfaces helps you to ensure that the subclasses that you write conform to the same API (application programmer interface) and thus allow you to process a whole series of objects of similar (but different) types through the same code - polymorphism. But you will see that I wrote "must" against Java and "may" against PHP. What's all that about?

In PHP, extra method definitions from abstract class and interface declarations only provide advise / a framework to the subclasses that use them - causing compile or run time errors if the subclasses haven't provided the extra code that is stated as being required. If you are programming in a large team with a PHP project, or the project is split between several coders who need to check up on each other's coding, they are a good idea ... my diagram has a "Sara" declaring an interface and a class to be abstract, so that she can help a "Pete" ensure that his subclasses are complete. But if Sara was writing all the classes on a small project, she may decide to save herself the extra coding, with the thought that the shorter code will be easier to follow later on. It's very much down to her analysis of the balanace of advantage.

Java, on the other hand, is heavily typed, and if you want to handle a number of objects of similar type through commonly named methods, it REQUIRES you to have them in a variable of the right type, and / or to cast them as appropriate. This additional enforcement by this particular language means that Sara wouldn't be allowed the option of saying "it's a small application / little cluster of classes and abstract declarations and interfaces are unnecessary bloat" as she could (and should) do on occasions in PHP ... no, in Java she must always use abstract and interfaces. And for the big systems that Java is used for these days, that's not a bad enforcement anyway.

Abstract classes and Interfaces are covered on our Object Oriented Programming in PHP day, and on our Java Bootcamp.
(written 2009-10-03)

Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
J710 - Java - Extending Classes and More
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [1066] Final, Finally and Finalize - three special words in Java - (2007-02-05)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1294] An example of Java Inheritance from scratch - (2007-08-00)
  [1501] Java - using super to call a method in the parent class - (2008-01-10)
  [1538] Teaching Object Oriented Java with Students and Ice Cream - (2008-02-12)
  [1556] Java - a demonstration of inheritance on just one page - (2008-02-26)
  [1819] Calling base class constructors - (2008-10-03)
  [2185] Abstract Classes - Java - (2009-05-16)
  [2604] Tips for writing a test program (Ruby / Python / Java) - (2010-01-29)
  [2860] What methods are available on this Java object? - (2010-07-08)
  [3047] What is a universal superclass? Java / Perl / Python / Other OO languages - (2010-11-13)
  [4334] Splitting out code into name blocks for clarity and reusability - (2014-11-30)
  [4366] Changing what operators do on objects - a comparison across different programming languages - (2014-12-26)
  [4394] Philosophy behind object design - and how I applied in to a Java example - (2015-01-14)
  [4419] Java Inheritance example - group of classes - step by step - (2015-02-08)
  [4422] Objects - from physical to virtual or abstract - Java - (2015-02-10)

H108 - Objects in PHP
  [67] Object Oriented Programming in PHP - (2004-09-29)
  [124] PHP v Java - (2004-11-20)
  [205] PHP5 lets you say no - (2005-02-07)
  [343] Should I use structured or object oriented? - (2005-06-10)
  [421] Don't repeat code - use loops or functions - (2005-08-21)
  [485] North, Norther and Northest - PHP 5 Objects - (2005-11-04)
  [720] Planning a hotel refurb - an example of a Gant chart in PHP - (2006-05-14)
  [836] Build on what you already have with OO - (2006-08-17)
  [1027] Cue the music, I'm happy. - (2007-01-09)
  [1153] Object Oriented Model - a summary of changes from PHP4 to PHP5 - (2007-04-18)
  [1535] OO PHP demonstration - comparing objects and more - (2008-02-08)
  [1682] Accounts in PHP - an OO demo - (2008-06-19)
  [1820] Sorting objects in PHP - (2008-10-04)
  [1925] Introduction to Object Oriented Programming - (2008-12-06)
  [2160] PHP - getclass v instanceof - (2009-05-07)
  [2169] When should I use OO techniques? - (2009-05-11)
  [2171] Cleaning up redundant objects - (2009-05-11)
  [2172] PHP4 v PHP5 - Object Model Difference - (2009-05-11)
  [2380] Object Oriented programming - a practical design example - (2009-08-27)
  [2435] Serialization - storing and reloading objects - (2009-10-04)
  [2632] Shipping a test harness with your class in PHP - (2010-02-12)
  [2641] Object Oriented Programming in PHP - (2010-02-19)
  [2680] Static class members in PHP - a documented example - (2010-03-16)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2741] What is a factory? - (2010-04-26)
  [2774] PHP - Object Oriented Design in use - (2010-05-21)
  [2921] Does copying a variable duplicate the contents? - (2010-08-14)
  [2922] Getting the OO design write - with PHP a example - (2010-08-14)
  [3142] Private and Public - and things between - (2011-01-22)
  [3210] Catchable fatal error in PHP ... How to catch, and alternative solutions such as JSON - (2011-03-22)
  [3211] Computer Graphics in PHP - World (incoming data) to Pixel (screen) conversion - (2011-03-24)
  [3607] Designing your application - using UML techniques - (2012-02-11)
  [3608] Design Patterns - what are they? Why use them? - (2012-02-12)
  [3609] How do classes relate to each other? Associated Classes - (2012-02-12)
  [3840] Autoload in PHP - (2012-08-17)
  [3841] Copying, duplicating, cloning an object in PHP - (2012-08-18)
  [3843] Caching Design Patterns - (2012-08-20)
  [3953] Objects in PHP - Revision - (2012-12-16)
  [4057] stdClass in PHP - using an object rather than an associative array - (2013-04-02)
  [4073] Learning about Object Orientation in PHP - a new set of examples - (2013-04-28)
  [4356] Object factories in C++, Python, PHP and Perl - (2014-12-19)
  [4626] Singleton design pattern - examples and uses - (2016-01-20)
  [4627] Caching results in an object for efficiency - avoiding re-calculation - (2016-01-20)
  [4628] Associative objects - one object within another. - (2016-01-20)

Back to
Controlling, supressing, enabling PHP error messages
Previous and next
Horse's mouth home
Forward to
Serialization - storing and reloading objects
Some other Articles
Listening to The Minister
Wiltshire Unitary News - Chamber of Commerce Intelligence
Melksham Hotel Rooms - pictures
Abstract classes, Interfaces, PHP and Java
Controlling, supressing, enabling PHP error messages
Using print_r in PHP to explore mysql database requests
Moving busstop!
Not just a PHP program - a good web application
Tcl scripts / processes on a web server via CGI
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page

This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2434_Abs ... -Java.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb