Core java - Advance Topics
  • Welcome
  • Schedule
  • 1) Exception Handling
    • 1) Introduction to Exception Handling
    • 2) Categories of Exceptions
    • 3) Creating a method that throws an exception
    • 4) Creating Custom Exception Classes
    • 5)What happens when an exception is thrown?
      • 5.1) Creating try-catch-finally blocks
      • 5.2) Using a method that throws a checked exception
      • 5.3) Using a method that throws a runtime exception
      • 5.4) Using a method that throws an error
      • 5.5) Will a finally block execute even if the catch block defines a return statement?
      • 5.6) What happens if both a catch and a finally block define return statement?
      • 5.7) What happens if a finally block modifies the value returned from a catch block?
      • 5.8) Can a try block be followed only by a finally block?
      • 5.9) Does the order of the exceptions caught in the catch blocks matter?
      • 5.10) Can I rethrow an exception or the error I catch?
      • 5.11) Can I declare my methods to throw a checked exception instead of handling it?
      • 5.12) I can create nested loops, so can I create nested try-catch blocks too?
      • 5.13) Should I handle errors?
    • 6) Best Practices
    • 7) Cheat Sheet
    • 8) Problems
  • 2) Wrapper Classes and Enums
    • 2.1) Creating objects of the wrapper classes
    • Enums
  • 3) Inner Classes
    • 3.1) Static nested class (also called static inner class)
    • 3.2) Inner class (also called member class)
    • 3.3) Anonymous inner class
    • 3.4) Method local inner classes
    • CheatSheet
  • 4) Generics
    • Multiple Type parameters in Generic classes
    • Inheritance using Generics
    • Generic interfaces
    • Generic Methods
    • Bounded type parameters
    • Applications
  • 5) Equals and Hashcode
    • Problems
  • CompareTo method overview
  • Basic DS
    • 1) Simple Array List
    • 2) Simple HashMap
  • 5) Collections Framework - Part 1
    • Introducing the collections framework
    • Working with the Collection interface
      • The core Collection interface
      • Methods of the Collection interface
    • Creating and using List, Set, and Deque implementations
      • List interface and its implementations
      • Iterators
      • Sorting List using custom sorting technique
      • Comparable Interface
      • Custom Sorting using comparator
      • ArrayList - Examples and practice problems
    • Stack
    • Linked List
    • LinkedList Operations
  • 6) Collections Framework - Part 2
    • Sets
      • Set Types
      • Array to Set (vice versa)
    • Maps
    • TreeMap
    • Autoboxing And Unboxing
  • Collections Framework - Part 3
    • Basics : DS , Number System
    • Internal Working
      • HashMap
      • HashSet
  • 7) Reflection API
  • 8) Annotations
  • 9) Reading Input From Various Sources
    • File Handling
    • Reading From Xml
    • Reading From JSON
  • 10) Multi-threading (Concurrency)
    • Protect shared data
    • Thread-safe access to shared data
  • 11) Design Patterns
    • Singleton
    • DI
  • 12) Internal Working of JVM
  • 13) Garbage Collection
  • 14) More on Strings (Buffer and Builder)
  • 15) Cloning and Immutable Class
    • 16) Serialization And Deserialization
    • Untitled
  • JAVA 8
    • Interface Changes
    • Lambda
    • Method Ref
    • Optional
    • Streams
    • Predicates
  • Practice Tests
    • Test - Collections
    • OOPS
    • S-OOPS
Powered by GitBook
On this page
  • GENERIC CLASS EXTENDING ANOTHER GENERIC CLASS :
  • Examples :
  • NON-GENERIC CLASS EXTENDING A GENERIC CLASS

Was this helpful?

  1. 4) Generics

Inheritance using Generics

PreviousMultiple Type parameters in Generic classesNextGeneric interfaces

Last updated 5 years ago

Was this helpful?

GENERIC CLASS EXTENDING ANOTHER GENERIC CLASS :

A type argument must be passed to the type parameter of a base class. You can do so while extending the base class or while instantiating the derived class.

Examples :

1)

package com.gns.generics;

class Parcel<T> {

}

class GenericParcel<T> extends Parcel<T> {

}

public class Generic3 {
	public static void main(String[] args) {
		Parcel<String> parcel = new GenericParcel<String>();
		// Parcel<String> parcel1 = new Parcel<Integer>(); won't compile
		// Parcel<String> parcel1 = new Parcel<Object>(); wont't compile
	}

}

2)

3)

package com.gns.generics;

class Parcel<T> {

}

class GenericParcel<X,T> extends Parcel<T> {

}

public class Generic3 {
	public static void main(String[] args) {
		Parcel<String> parcel = new GenericParcel<Integer,String>();
		// Parcel<String> parcel1 = new Parcel<Integer>();
		// Parcel<String> parcel1 = new Parcel<Object>();
	}

}

4)

package com.gns.generics;

class Book{
	
}
class Parcel<T> {

}

class GenericParcel<X> extends Parcel<Book> {

}

public class Generic3 {
	public static void main(String[] args) {
		Parcel<Book> parcel = new GenericParcel<Integer>();
		// Parcel<String> parcel1 = new Parcel<Integer>();
		// Parcel<String> parcel1 = new Parcel<Object>();
	}

}

5)

package com.gns.generics;

class Parcel<T> {

}

class GenericParcel<X> extends Parcel<String> {

}

public class Generic3 {
	public static void main(String[] args) {
		Parcel<String> parcel = new GenericParcel<Integer>();
	}

}

NON-GENERIC CLASS EXTENDING A GENERIC CLASS

You can extend a generic base class to define a nongeneric base class. To do so, the derived class doesn’t define any type parameters but passes arguments to all type parameters of its generic base class. For example

package com.gs.corejava.generics;

class Phone{
	
}
class Parcel<T>{
	
}
class NonGenericPhoneParcel extends Parcel<Phone> {
	
}
public class Generic4 {

}

In the preceding example, NonGenericPhoneParcel is a nongeneric class that passes argument Phone to its base class Parcel.

You can’t pass type arguments to a nongeneric class.