Tutorial 5
This commit is contained in:
parent
9fbc9278e9
commit
0d87001c46
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassC extends ClassA {
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ClassF z = new ClassF();
|
||||||
|
|
||||||
|
z.print(9);
|
||||||
|
z.print(2, "Cx2002");
|
||||||
|
z.print("Object");
|
||||||
|
z.print("OODP", "Java");
|
||||||
|
// z.print("OODP", 2002); // Compilation error
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
public abstract class ClassC extends ClassA {
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ClassF z = new ClassF();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
public abstract class ClassC extends ClassA {
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
public abstract class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
public abstract class ClassC extends ClassA {
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ClassF z = new ClassF();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
public abstract class ClassC extends ClassA {
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// I - Works
|
||||||
|
// ClassC c = new ClassD();
|
||||||
|
// c.print("hello", "there");
|
||||||
|
|
||||||
|
// II - Does not compile because class C is abstract
|
||||||
|
// ClassA a = new ClassC();
|
||||||
|
// a.print(1, "there");
|
||||||
|
|
||||||
|
// III - Doesn't work - Class A does not have print(string, string) method
|
||||||
|
// ClassA a = new ClassF();
|
||||||
|
// a.print("hello", "there");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
public abstract class ClassC extends ClassA {
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
public abstract class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public abstract void print(String x, String y);
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// I - Works
|
||||||
|
ClassC c = new ClassD();
|
||||||
|
c.print("hello", "there");
|
||||||
|
|
||||||
|
// II - Does not compile because class C is abstract
|
||||||
|
// ClassA a = new ClassC();
|
||||||
|
// a.print(1, "there")
|
||||||
|
|
||||||
|
// III - Works
|
||||||
|
ClassF a = new ClassF();
|
||||||
|
a.print("hello", "there");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void print(int x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassC extends ClassA {
|
||||||
|
public void print(String x, String y) {
|
||||||
|
System.out.println(x + " " + y);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassD extends ClassC {
|
||||||
|
public void print(String a, String b) {
|
||||||
|
System.out.println(a + " " + b);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassE extends ClassC {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassF extends ClassE {
|
||||||
|
public void print(int x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
public class ClassG extends ClassF {
|
||||||
|
public void print(String x) {
|
||||||
|
System.out.println(x);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// I - Doesn't work because downcast needs to be explicitly declared
|
||||||
|
// ClassC c = new ClassD();
|
||||||
|
// ClassE e = c;
|
||||||
|
|
||||||
|
// II - Can´t upcast because they are from different family branches
|
||||||
|
// ClassB b = new ClassE();
|
||||||
|
// b.print("hello");
|
||||||
|
|
||||||
|
// III
|
||||||
|
// ClassA a = new ClassF(); // Ok
|
||||||
|
// a.print(12, "there"); // Ok
|
||||||
|
// a.print(88); // Compilation error
|
||||||
|
|
||||||
|
// IV -
|
||||||
|
// ClassA a = new ClassC(); // Ok
|
||||||
|
// ClassG g = (ClassG)a; // Runtime error
|
||||||
|
// g.print("hello");
|
||||||
|
|
||||||
|
|
||||||
|
// V - We lost track of the print(string, string) in C become it become a A first
|
||||||
|
// ClassA a = new ClassC(); // ok
|
||||||
|
// ClassG g = (ClassG)a; // Runtime error
|
||||||
|
// g.print("hello", "there");
|
||||||
|
|
||||||
|
// VI
|
||||||
|
// ClassA a = new ClassF(); // OK
|
||||||
|
// ClassC f = (ClassC)a; // Ok
|
||||||
|
// f.print(88, "there"); // Ok
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
public class ClassA {
|
||||||
|
public void method1() {
|
||||||
|
System.out.println("ClassA.method1");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void method2() {
|
||||||
|
System.out.println("ClassA.method2");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
public class ClassB extends ClassA {
|
||||||
|
public void method2() {
|
||||||
|
System.out.println("ClassB.method2");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void method3() {
|
||||||
|
System.out.println("ClassB.method3");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
public class ClassC extends ClassB {
|
||||||
|
public void method3() {
|
||||||
|
System.out.println("ClassC.method3");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void method4() {
|
||||||
|
System.out.println("ClassC.method4");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// I
|
||||||
|
// ClassA a = new ClassB();
|
||||||
|
// ClassB b = (ClassB) a;
|
||||||
|
// b.method2(); // ClassB.method2
|
||||||
|
// b.method1(); // ClassA.method1
|
||||||
|
|
||||||
|
// II
|
||||||
|
// ClassA c = new ClassB();
|
||||||
|
// ClassC d = (ClassC) c; // Runtime error here
|
||||||
|
// d.method3(); // Never executed
|
||||||
|
|
||||||
|
// III
|
||||||
|
// ClassA e = new ClassC();
|
||||||
|
// ClassB f = (ClassB) e;
|
||||||
|
// f.method3(); // ClassC.method3
|
||||||
|
// f.method2(); // ClassB.method2
|
||||||
|
// f.method1(); // ClassA.method1
|
||||||
|
|
||||||
|
// IV
|
||||||
|
// ClassC g = (ClassC) new ClassA(); // Runtime error
|
||||||
|
// g.method1(); // never executed
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,73 @@
|
||||||
|
//public abstract class Polygon {
|
||||||
|
public class Polygon {
|
||||||
|
public enum KindofPolygon {
|
||||||
|
POLY_PLAIN,
|
||||||
|
POLY_RECT,
|
||||||
|
POLY_TRIANG
|
||||||
|
};
|
||||||
|
protected String name;
|
||||||
|
protected float width;
|
||||||
|
protected float height;
|
||||||
|
protected KindofPolygon polytype;
|
||||||
|
|
||||||
|
public Polygon(String theName, float theWidth, float theHeight) {
|
||||||
|
name = theName;
|
||||||
|
width = theWidth;
|
||||||
|
height = theHeight;
|
||||||
|
polytype = KindofPolygon.POLY_PLAIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KindofPolygon getPolytype() {
|
||||||
|
return polytype;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPolytype(KindofPolygon value) {
|
||||||
|
polytype = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float calArea() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printWidthHeight( ) {
|
||||||
|
System.out.println("Width = " + width + " Height = " + height);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// public abstract float calArea();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
public class Rectangle extends Polygon {
|
||||||
|
public Rectangle(String theName, float theWidth, float theHeight) {
|
||||||
|
super(theName, theWidth, theHeight) ;
|
||||||
|
this.polytype = KindofPolygon.POLY_RECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float calArea() {
|
||||||
|
return width * height;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
public class TestPolygon {
|
||||||
|
public static void printArea(Rectangle rect) {
|
||||||
|
float area = rect.calArea();
|
||||||
|
System.out.println("The area of the " + rect.getPolytype() + " is " + area);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void printArea(Triangle tri) {
|
||||||
|
float area = tri.calArea();
|
||||||
|
System.out.println("The area of the " + tri.getPolytype() + " is " + area);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args ) {
|
||||||
|
|
||||||
|
Rectangle rect = new Rectangle("Rectangle", 3.0f, 4.0f);
|
||||||
|
printArea(rect); // static binding
|
||||||
|
rect.printWidthHeight();
|
||||||
|
|
||||||
|
Triangle triangle= new Triangle("Triangle", 3.0f, 4.0f);
|
||||||
|
printArea(triangle); // static binding
|
||||||
|
triangle.printWidthHeight();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void printArea(Polygon poly) {
|
||||||
|
float area = poly.calArea( );
|
||||||
|
System.out.println("The area of the " + poly.getPolytype() + " is " + area);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main2(String[] args ) {
|
||||||
|
|
||||||
|
Rectangle rect = new Rectangle("Rectangle", 3.0f, 4.0f);
|
||||||
|
printArea(rect); // dynamic binding
|
||||||
|
rect.printWidthHeight();
|
||||||
|
|
||||||
|
Triangle triangle= new Triangle("Triangle", 3.0f, 4.0f);
|
||||||
|
printArea(triangle); // dynamic binding
|
||||||
|
triangle.printWidthHeight();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
public class Triangle extends Polygon {
|
||||||
|
public Triangle (String theName, float theWidth, float theHeight) {
|
||||||
|
super(theName, theWidth, theHeight) ;
|
||||||
|
this.polytype = KindofPolygon.POLY_TRIANG;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float calArea() {
|
||||||
|
return 0.5f * width * height;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue