1 / 15

Overloading as Polymorphism and misc. topics

Overloading as Polymorphism and misc. topics. Today. Constructor and Method Overloading Our first example of polymorphism Revisiting Static Class Fields and Methods Enumerations Assignment 2 still coming. Polymorphism. Poly = many, morph = forms

pancho
Download Presentation

Overloading as Polymorphism and misc. topics

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Overloading as Polymorphism and misc. topics

  2. Today • Constructor and Method Overloading • Our first example of polymorphism • Revisiting Static Class Fields and Methods • Enumerations • Assignment 2 still coming

  3. Polymorphism • Poly = many, morph = forms • General principle of providing access to an abstraction or method in many forms • Idea is that different forms “fit” different contexts • Note: underlying functionality is the same. • In OO programming, principle is evident in a number of different places. • Constructor overloading • Method overloading

  4. Constructors • What happens when you don’t define a constructor. • Default constructor with no arguments. • Creates new object with all fields set to default value • Numeric fields set to 0 • Boolean fields set to false • String, Array, and any other sort of reference value field set to null. • lec5.v1

  5. Constructor Overloading • Can define multiple versions of the constructor. • Distinguished from each other by type and number of parameters • Must be some difference otherwise the compiler won’t be able to tell them apart. • When you use the constructor, the right one will be chosen based on the parameters provided. • Note that if you still want a default no-argument constructor, you have to provide it explicitly. • lec5.v2

  6. Constructor Chaining • Common pattern is to “chain” one constructor off of another. • First line of code in the constructor must be the this keyword as a function with parameters • Matching constructor is called first and allowed to execute. • Then remaining code in original constructor called. • Can chain multiple constructors one on to another • lec5.v3

  7. Method Overloading • Regular methods can also be overloaded • Same method name defined more than once. • Return type must be the same. • Method type must be the same. • Instance method or static class method • Parameter list must somehow be different • Again, this is how the compiler knows which one is meant. • Either different in number or type (or both) • One version can call another • No restrictions on when • No special syntax • lec5.v4, lec5.v5

  8. Why Overload? • Provides access to constructor / method in a more context specific way. • Limitations of overloading • Does not handle the case when you have two different situations that aren’t distinguished by the number or type of parameters being passed.

  9. Static Class Fields • Indicated by static modifier to field declaration. • Can be accessed via the class name • access modifiers can also be used to control visibility • Contrast with instance fields • Each object has its own copy of an instance field • Value of the instance fields are the state of the object • Only one copy of the class field • Associated with the class as a whole • Common uses • As named constant values associated with the class • In this case, modify the declaration of the field with the keyword final • By convention, named constants are ALL_CAPS • As collective information associated with the class as a whole. • Avoid accessing static class fields through an object. • It does work, but it is misleading and not good style • lec5.v6

  10. Static Class Methods • Methods associated with the class but that are not associated with a specific object. • No this reference within the function. • Common uses • Getters / Setters for static class fields • Helper / auxiliary functions • Factory methods for creating new instances • We’ll revisit this in more detail later. • lec5.v7

  11. Motivating Enumerations • Often need to model part of an object as one value from a set of finite choices • Examples: • Suite of a playing card • Day of week • Directions of a compass • One approach is to use named constants • lec5.v8 • Drawbacks of this approach • No type safety • No value safety

  12. Simple Java Enumerations • General syntax: access_typeenumEnumName {symbol, symbol, ...}; • Example: • public enum Genre {POP, RAP, JAZZ, INDIE, CLASSICAL} • Enumeration name acts as the data type for the enumerated values. • Enumerated values available as EnumName.symbol as in: Genre.POP • Outside of the class • Fully qualified name required as in: Song.Genre.POP • Symbol names don’t have to all caps, but that is traditional • lec5.v9

  13. Not so simple enumerations • Java enumerations are actually much more powerful than this. • Check out this tutorial for more: http://javarevisited.blogspot.com/2011/08/enum-in-java-example-tutorial.html

  14. Notes on using Arrays • Uninitialized arrays of reference types have all elements set to null. • You need to create / set the elements individually • Multidimensional Arrays • 2D arrays are simply an “array of arrays” • And so on for higher dimensions • Can specify all dimension sizes specified at time of declaration • Results in an “even” array • Can make “ragged” array by only specifying first dimension and then explicitly creating each subarray • lec5.v09 • Arrays are passed by reference • If passed to a method, any alterations to array made by the method affect original array • Similarly, if exposed as part of an object, breaks encapsulation • lec5.v10

  15. Java Collection Framework • Arrays are not resizeable • Often need a collection of items that acts like an array than can grow or shrink • Java Collection Framework

More Related