This course builds on the Java foundation developed in CSC 161 and is the second core course required for students in the Computer Science Transfer program. It investigates the software engineering principles of encapsulation, information hiding and code reuse, and discusses how these concepts are used to build abstract data types. The object oriented programming features of classes, inheritance, polymorphism and composition are studied, along with constructors and method overloading. Students implement Java programs incorporating features from the Java programming language.