Method Overloading vs Overriding

http://www.programmerinterview.com/index.php/java-questions/method-overriding-vs-overloading/

Method Overloading: 동일한 함수명에 매개변수가 다른 함수를 둘 이상 정의하는 것으로, 동일한 함수 기능을 수행하지만 다른 매개변수의 경우를 처리할 때 사용
//compiler error – can’t overload based on the 
//type returned (one method returns int, the other returns a float):
//int changeDate(int Year) ;
//float changeDate (int Year);

//compiler error – can’t overload by changing just
//the name of the parameter (from Year to Month):
//int changeDate(int Year);
//int changeDate(int Month) ;

//valid case of overloading,
//since the methods have different number of parameters:
int changeDate(int Year, int Month) ;
int changeDate(int Year);

//also a valid case of overloading,
//since the parameters are of different types:
int changeDate(float Year) ;
int changeDate(int Year);

Method Overriding: 상속받은 파생 클래스에서 동일한 함수명에 동일한 매개변수로 정의하여 함수를 재정의하는 것으로 상속되어진 함수의 기능을 변경해서 재사용하고 싶을 때 사용

public class Parent {

public int someMethod() {

return 3;

}
}

public class Child extends Parent{

// this is method overriding:
public int someMethod() {

return 4;

}

}

protected constructor

protected constructor는 추상클래스 (abstract class)에서 사용을 권고함. 추상 클래스를 상속받는 파생클래스에서 파생 클래스 생성자가 부모 클래스 즉, 추상 클래스를 초기화 하기 위해 추상 클래스 생성자를 호출 할 수 있도록 지원함.
public abstract class Shape
{

protected Shape(String name) { this.name = name; }
private String name;
public void print() { System.out.print(this.name); }
}
public class Triangle extends Shape
{
private double bottom, height;

public Triangle(String name) { super(name); this.bottom = 1; this.height = 1; }

public void print()
{
super.print();
System.out.printf(” 밑변: %f 높이: %f\n”, this.bottom, this.height);
}
}
public class Rectangle extends Shape
{
private double width, height;

public Rectangle(String name) { super(name); this.width = 2; this.height = 3; }

public void print()
{
super.print();
System.out.printf(” 가로: %f 세로: %f\n”, this.width, this.height);
}
}
class ShapeTest
{
public static void main(String[] args)
{
// Shape s = new Shape(“도형”); // Error; Shape is abstract; cannot be instantiated
Shape s = new Triangle(“삼각형”);
s.print(); // 삼각형 밑변: 1 높이: 1
s = new Rectangle(“직사각형”);
s.print(); // 직사각형 가로: 2 세로: 3
}
}

 

private constructor

private constructor는 정적 메소드와 속성 (static method & property)만 있는 경우 사용함.

public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount() { return ++currentCount; }
}
class TestCounter
{
public static void main(String[] args)
{
// If you uncomment the following statement, it will generate
// an error because the constructor is inaccessible:
// Counter aCounter = new Counter(); // Error
Counter.currentCount = 100;
Counter.IncrementCount();
System.out.println(“count=” + Counter.currentCount);
}

} // Output: New count: 101

HW2

단국대학교 응용컴퓨터공학전공 JAVA프로그래밍1 (2016년 가을학기) 실습
과목코드 : 514760-1
날짜: 2016년 10월 6일

– 실습번호 : HW2 (Due by 10/20)
– 실습제목 : class, abstract class, inheritance, set/get, ArrayList
– 실습요약 : 입체 도형의 겉넓이(surface area)와 부피(volume) 구하기 & 평면 도형의 넓이(area) 구하기
– 준비자료 : HW1
http://www.mathsisfun.com/area-calculation-tool.html
http://math.about.com/od/formulas/ss/surfaceareavol.htm

10/20까지 online.dankook.ac.kr 이러닝으로 source code(*.java), binary code(*.class), 보고서(12-font 2~3 page)를 학번_이름_Ex2.zip으로 묶어서 이러닝에 제출한다. 보고서 (30%)

– 실습문제
0. GeometryType과 FigureType을 아래와 같이 정의한다.
enum GeometryType { SPHERE(1), CONE(2), CYLINDER(3), RECTANGULAR_PRISM(4), SQUARE_PYRAMID(5), ISOSCELES_TRIANGULAR_PRISM(6) }
enum FigureType { TRIANGLE(1), SQUARE(2), RECTANGLE(3), PARALLELOGRAM(4), RHOMBUS(5), TRAPEZOID(6) }

1. Geometry와 Figure 추상클래스는 아래와 같이 정의한다.
public abstract class Geometry {
public abstract GeometryType getType(); // 도형타입 (GeometryType)
public abstract double getSurfaceArea(); // 겉넓이
public abstract double getVolume(); // 부피
public abstract void getAdditionalUserInput(); // 추가적인 사용자 입력
public void printInfo() {
System.out.println(toString() + “ S.A.=” + getSurfaceArea() + “ Vol=” + getVolume());
}
public abstract class Figure {
public abstract FigureType getType(); // 도형타입 (FigureType)
public abstract double getArea(); // 넓이
public abstract void getAdditionalUserInput(); // 추가적인 사용자 입력
public void printInfo() {
System.out.println(toString() + “Area=” + getArea());
}

2. Geometry 추상클래스를 상속받은 Sphere, Cone, Cylinder, … 는 겉넓이(Surface Area), 부피(Volume)를 계산하여 출력한다. 그리고 Figure 추상클래스를 상속받은 Triangle, Square, Rectangle, … 등 클래스는 넓이(Area)를 계산하여 출력한다.

3. GeometryFactory 클래스와 FigureFactory 클래스는 사용자가 입력한 도형타입에 따라 원하는 실제 클래스 (즉, Sphere, Cone, … 그리고 Triangle, Square,.. 등등) 객체를 생성하여 계산한다. 이 클래스는 다음의 메소드 (Method)만을 갖는다.
+public static Geometry getInstance(GeometryType type)
+public static Figure getInstance(FigureType type)

4. GeometryCalculator 클래스와 FigureCalculator 클래스는 계산 메소드를 갖는다
+ public static void calculateAll() // ArrayList에 Geometry/Figure 객체를 생성하여 넣고, 각각의 SurfaceArea&Volume/Area계산한다.
+ public static void calculateByUserInput() // 사용자 입력으로 원하는 Geometry /Figure객체를 생성하여 SurfaceArea&Volume/Area를 계산하고, ArrayList에 저장해 두었다가 프로그램을 종료할 시 전체 리스트를 출력한다.

5. Utility 클래스에서는 각종 유틸리티 메소드를 갖는다.
+public static GeometryType getUserGeometry()
+public static FigureType getUserFigure()
+public static double getUserInputDouble()
+public static int getUserInputBetween(int min, int max)
+public static boolean getUserExitKey()

6. GeoFigCalculator 클래스에서는 사용자의 입력에 따라 GeometryCalculator와 FigureCalculator를 이용하여 계산한 모든 결과를 출력한다.

7. 사용자의 잘못된 입력에 따른 처리를 반드시 포함해야 하며, 그 외에 본인이 더 테스트해보고 싶은 method나 routine을 추가하라. 실행 화면과 코드를 첨부하시오.

OOP

OOP

BankAccount – instance vs static member field & method

CarSedan – public vs protected vs private

PersonStudent – method overriding

ShapePolymorphism – abstract class & method