Apple extends Asset{ public Apple(Asset yen, float price){ setPrice(yen, price); yen.setPrice(1 / price, this); } public Apple(){ } } Yen extends Asset{ public Yen(Asset products, float price){ setPrice(products, price); products.setPrice(1 / price, this); } public Yen(){ } } Bottle{ public static void main(){ Yen yen = new Yen(); Apple apple = new Apple((Asset)yen, 100); checkPrice((Asset)apple); } private checkPrice(Asset asset){ float price = asset.getPrice(); Asset unit = asset.getUnitOfPrice(); checkPrice(unit); } }