/*
* Copyright (C) 2009 E.Albert, P.Arenas, S.Genaim, G.Puebla, and D.Zanardini
* https://costa.ls.fi.upm.es
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package pubs;
/**
* This class illustrates dynamic dispatch
*
* @author E.Albert, P.Arenas, S.Genaim, and G.Puebla
* @costaContext pubs.A pubs.B pubs.C
*/
public class Incr {
/**
* The loop in this method iterates a number of times which depends on
* the run-time type of o
* @param n
* @param o is an object which can be of any of classes A, B, or C
* @return
*/
int add(int n,A o){
int res=0;
int i=0;
while (i<=n){
res=res+i;
i=o.incr(i);
}
return res;
};
public static void main(String[] args) {
// First test
int test = 10;
Incr testClass = new Incr();
A c = new A();
int result = testClass.add(test,c);
System.out.println("Result: "+result);
/* // Second test
test = 50;
testClass = new Incr();
c = new C();
result = testClass.add(test,(B)c);
System.out.println("Result: "+result);
// Third test
test = 100;
testClass = new Incr();
c = new C();
result = testClass.add(test,(B)c);
System.out.println("Result: "+result);
*/
}
}