//public class 

public static void exe(Calculator cal){

//static으로 class method 생성해 각각의 instance가 method를 공유한다

//부모타입으로 매개변수를생성해 data를 가져온다

cal.setNum(100,200); 
cal.calResult(); 

//main
public static void main(String[] args) {
Calculator c1 = new Sum(); //부모type의 자식 instance를 생성
Calculator c2 = new Subtractor(); 

exe(c1); //sum 의 값을 출력한다
exe(c2); //subtractor의 값을 출력한다

//부모타입으로 매개변수를 받기때문에 각각의 인스턴스는 인자값을 받아온다

//이처럼 calculator 하나의 type 으로 기능이 다른동작을수행하는걸 다형성이라고한다 


Sum sum = new Sum();
sum.setNum(100,200);
sum.calResult();

Subtractor sub = new Subtractor();
sub.setNum(100,200);
sub.calResult();

 

//abstract class Calculator 

//abstract는 미완성클래스로 상속을 강요하는 class이다
int n1, n2;

public void setNum(int n1, int n2) {
this.n1 = n1;
this.n2 = n2;
}
public abstract void calResult(); 

//추상method는 overriding을 해줘야한다

//class Sum extends Calculator
public calResult(){ 
System.out.println(this.n1+this.n2);
//추상method를 overriding해준다

 

//class Subtractor extends Calculator
public void calResult() {
System.out.println(this.n1-this.n2;)
} //추상method를 overriding해준다
----------

Calculator c1 = new Sum(); 
Calculator c2 = new Subtractor();


Calculator ca[] = new Calculator[2]; 
ca[0] = new Sum(); 
ca[1] = new Subtractor(); 
//서로 다른 객체를 이용해서 method를 호출할수있지만

//부모가 같을경우 배열을 이용하여 두객체를 하나의 객체로 선언할수있다

-----------

static int i = 0; //carArray가 static이기때문에 변수도 static으로 바꿔준다
static Calculator calArray[] = new Calculator[3];

//static으로 배열을 생성했기때문에 객체를생성할필요가없다

//public class

public static void exe(Calculator cal){

//static으로 class method 생성해 각각의 instance가 method를 공유한다

//부모타입으로 매개변수를생성해 data를 가져온다

calArray[i++] = cal;

//carArray배열에 car객체를 입력한다

cal.setNum(100,200); 
cal.calResult(); 

} //class method

//main
Sum sum = new Sum();  
Subtractor sub = new Subtractor(); 

 

exe(sum); 
exe(sub); 
exe(sum); 
exeSequence(); 

//같은 class이므로 바로불러올수있다

 

//exeSequence
public static void exeSequence() {
for(int i=0;i<calArray.length;i++) {
String str = calArray[i].operand();

//carArray[i]에 operand method를 호출
System.outprintln(str);
} //연산의 순서를 나타내기위한 class method

//abstract class Calculator 

//abstract는 미완성클래스로 상속을 강요하는 class이다
int n1, n2;

public void setNum(int n1, int n2) { 
this.n1 = n1; 
this.n2 = n2; 
} 
public abstract void calResult(); 

//추상method는 overriding을 해줘야한다 

public abstract String operand();

//연산의 순서를 나타내기위해 추상method를 만든다


//class Sum extends Calculator
public calResult(){ 
System.out.println(this.n1+this.n2); 
//추상method를 overriding해준다

public String operand(){

return "plust";

//추상method를 overriding해준다

 

//class Subtractor extends Calculator
public void calResult() { 
System.out.println(this.n1-this.n2;) 
} //추상method를 overriding해준다

public String operand(){

return "minus";

//추상method를 overriding해준다

'java' 카테고리의 다른 글

Object class(toString(), Equals(), hashCode())  (0) 2019.08.03
예외처리(Exception)  (0) 2019.08.03
다형성(Polymorphism) -first  (0) 2019.08.03
인터페이스(interface)  (0) 2019.08.03
final class, final method  (0) 2019.08.02

//public class Member
static int aa; //class 변수
String str; //instance 변수

public Member() {
System.out.println("Constructor");

//생성자를 만들지 않아도 기본 생성자가 자동으로 생성된다.

//생성자에는 static이 없고 반환타입이 없다 

public static void yy() {
System.out.println("class method");
}

public static String yyy() {
System.out.println("반환값이 있는 class method");
return "return value";
}

public void bb() {
System.out.println("instance method");
}

public int xxx() {
System.out.println("반환값이 있는 instance method")
return 1000;
}

public void zz(String str1) {
System.out.println("매개변수가 있는 메소드"+str1);
}

//main
Member mem = new Member(); //Constructor가 출력된다

//생성자를 호출하는건 객체를 생성한다는 의미이다. 

Member.yy(); //class method 가출력된다
//같은 클래스일경우 class명 없이 yy();로 호출가능하다

mem.bb(); //class method가 출력된다

mem.zz("parameter");
//string type의 형태로 호출해줘야한다
//parameter 값을 str1에 넘겨주고 문장을 출력할때 그값을 이용해 출력한다

String str2 = yyy();
System.out.println(str2); //return value가 출력된다
//yyy method를 호출해서 반환값 return value를 str2에 돌려준다

int qq = mem.xxx();
System.out.println(qq);
//xxx method를 호출해 반환값 1000을 qq에 돌려준다

'java' 카테고리의 다른 글

캡슐화(encapsulation)  (0) 2019.08.02
메소드, 생성자 오버로딩(overloading)  (0) 2019.08.02
class, instance 변수 와 method  (0) 2019.08.02
class 객체 및 instance, 멤버요소들  (0) 2019.08.02
입출력(main method/System.in/Scanner)  (0) 2019.08.01

+ Recent posts