When a class wants to access way too much of another class's internals - it wants to be a part of that other class and get all of its data. Sometimes, this is unavoidable howerver in order to avoid tight internal coupling and provide proper abstraction.
public class HourlyEmployeeReport { private HourlyEmployee employee ; public HourlyEmployeeReport(HourlyEmployee e) { this.employee = e; } String reportHours() { return String.format( "Name: %s\tHours:%d.%1d\n", employee.getName(), employee.getTenthsWorked()/10, employee.getTenthsWorked()%10); } }
Here the reportHours function "envies" the data inside of employee; however we don't want to expose how the employee report is formatted (string.format) to the employee, who doesn't care about this information. Thus we will leave it as is.