예제1)
public class Test1 {
public static void main(String[] args){
Ex1 oo=new Ex1(); // Ex1 oo; oo=new Ex1; 과 같다 new 다음 생성자.
double a=oo.pow(2, 10); // 2,10:실인수 pow의 함수 값은 double 이므로 double로 설정
System.out.println("2의 10승 : " +a);
char aa=oo.upper('b');
System.out.println("b:"+aa);
System.out.println("b:"+oo.isUpper('b'));
System.out.println("A:"+oo.isUpper('A'));
int aaa=oo.sum(3,1);
System.out.println("두 수의 합 : " +aaa);
System.out.println("두 수의 합 : " +oo.sum(3,1));
}
}
class Ex1 {
// 두정수중 최대값을 구하는 메소드
public int max(int x,int y) {
if(x>y) // return x>y?x:y; 삼항연산자
return x;
return y;
}
// 두정수의 적은수에서 큰수까지 합구하기
public int sum(int x,int y) {
int s=0;
if(x>y){
for(int i=y; i<=x; i++)
s+=i;
} else {
for(int i=x; i<=y; i++)
s+=i;
}
return s;
}
//중복정의
public int sum(int n) {
int s=0;
for(int i=1; i<=n; i++)
s+=i;
return s;
}
// 대문자인지 소문자인지 판별
public boolean isUpper(char ch) {
if(ch>='A' && ch<='Z')
return true;
return false;
}
public char upper(char ch) {
char a;
if(ch>='a' && ch<+'z')
a=(char)(ch-32);
else
a=ch;
return a;
}
public double pow(int m,int n) { // m,n : 가인수(형식매개변수)
double s=1;
if(n>=1){
for(int i=1; i<=n; i++)
s*=m;
}else{
for(int i=1; i<=(-n); i++)
s/=m;
}
return s; // void인경우만 생략 가능 // s값을 불러온놈에게 되돌려주라는 이야기.
}
}
예제1 결과)
2의 10승 : 1024.0
b:B
b:false
A;true
두 수의 합 : 6
두 수의 합 : 6
=======================================================================================================================================
예제2)
public class Test2{
public static void main(String[] args) {
Ex2 oo=new Ex2();
byte a=10; //Ex2 클래스에 해당 자료형을 가지는 메소드가 없기 때문에 byte와 가장 가까운 short인자의 중복정의 메소드로 적용되어 출력
short b=20;
char c='A';
int d=30;
long e=40;
oo.print();
oo.print(a);
oo.print(b);
oo.print(c);
oo.print(d);
oo.print(e);
Short ss=20; // short Wrapper 클래스 : 기본 자료형을 클래스로 만들어놓은것
short aa=30; // 5번줄과 동일
int bb=40;
long cc=50;
oo.write(ss);
oo.write(aa);
oo.write(bb);
oo.write(cc);
}
}
// overloading : 중복정의
// 메소드의 이름은 동일(모두 print)하지만 '인수의 개수가 다르거나', '인수의 형이 다르면' 다른 메소드로 취급
class Ex2{
public void print() {
System.out.println("인자가 없는것........");
}
/*
public int print() {
System.out.println("인자가 없는것........"); // return타입만 다르면 오버로딩 되지 않는다.(인수의 갯수와 인수타입이 같고)
}
*/
public void print(short s) {
System.out.println("short 인자 : "+ s);
}
public void print(int s) {
System.out.println("int 인자 : "+ s);
}
public void print(long s) {
System.out.println("long 인자 :" +s);
}
public void write(Short s) {
System.out.println("short 인자 : "+ s);
}
public void write(int s) {
System.out.println("int 인자 : "+ s);
}
public void write(Long s) {
System.out.println("long 인자 : "+ s);
}
}
예제2 결과)
인자가 없는것........
short 인자 : 10
short 인자 : 20
int 인자 : 65
int 인자 : 30
long 인자 :40
short 인자 : 20
int 인자 : 30
int 인자 : 40
long 인자 : 50
=======================================================================================================================================
예제3)
public class Test3 {
public static void main(String[] args) {
Ex3 ob=new Ex3();
ob.print(5);
System.out.println(ob.sum(100)); //매개변수가 sum메소드의 조건에 부합하지 않을 때까지 지속적으로 호출 -> 20번줄 : 1보다 큰 2가 될때까지 호출
ob.binary(125);
System.out.println();
System.out.println("45와 18의 최대공약수 : "+ob.gcm(45,18));
}
}
class Ex3 {
// 되부름(Recursion). stack에 임시로 저장
public void print(int n) {
if(n>0)
print(n-1);
System.out.print(n+" ");
}
public int sum(int n) {
return n>1?n+sum(n-1):1;
}
// 10진수(양수)의 2진수로 변환
public void binary(int n) {
if(n<2)
System.out.print(n);
else {
binary(n/2);
System.out.print(n%2);
}
}
//최대공약수 구하기
public int gcm(int a,int b) {
return b==0?a:gcm(b,a%b);
}
// a의b승 구하기. 단 b가 양수라는 가정.
public void pow(int a, int b) {
return b<1?1:a*pow(a,b-1);
}
예제3 결과)
0 1 2 3 4 5 5050
1111101
45와 18의 최대공약수 : 9
=======================================================================================================================================
예제4)
public class Test4 {
public static void main(String[]args) {
Ex4 ob=new Ex4();
int a,b,c;
a=ob.sum(1,2,3,4,5,6,6,7,8,910);
b=ob.sum(2,3,4,8,10);
c=ob.sum(3,6,9);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
class Ex4{
/* 부정인수는 메소드에 하나만 올 수 있다. 부정인수는 우측에 있어야만 한다.
void print(int a, float... aa){} // 가능
void print(int a, float... aa){} // 불가능
void print(int a, float... aa){} // 불가능
*/
public int sum(int ... args) { // ...(부정인수) 인자안에 들어오는 자료형만 똑같다면 갯수상관없이 자료를 받는다.
int s=0;
/*, 아래 식과 동일하다
for(int i=0; i<args.length; i++)
s+=args[i];
*/
for(int n:args)
s+=n;
return s;
}
}
예제4 결과)
952
27
18
=======================================================================================================================================
예제5)
public class Test5 {
public static void main(String[] args){
System.out.println("명령행인수개수:"+args.length);
for(int i=0; i<args.length; i++)
System.out.println("args["+i+"}:"+args[i]);
}
}
/*
// 명령행 인수 :aa bb cc -> args 에 들어간다.
cmd>java Test5 aa bb ccc
args[0]<-"aa"
args[0]<-"bb"
args[0]<-"cc"
*/
예제5 결과)
이 결과는 에딧플러스의 메뉴의 [도구] - [사용자 도구 구성(C)...] 에서 자바실행을 설정한 항목의 인수 설정값에 $(FileNameNoExt) $(Prompt) 값을 주어서 확인하였다.
aa, bb, cc값을 줘서 확인함
=======================================================================================================================================
예제6)
public class Test6 {
public static void main(String[] args){
Ex6 ob1=new Ex6(); // ob1의 num
Ex6 ob2=new Ex6(10); // ob2의 num
System.out.println(ob1.getNum());
System.out.println(ob2.getNum());
ob1.setNum(20);
System.out.println(ob1.getNum());
System.out.println(ob2.getNum());
}
}
class Ex6{
private int num; // 초기화:0. 클래스내에서 전역변수
public Ex6() {
//Ex6(50); //오류:생성자는 일반 메소드처럼 호출불가
// 클래스 객체=new 생성자(); 만 가능
this(50); // 다른 생성자 호출(몸체실행) 단, 생성자에서만
System.out.println("인자가 없는 생성자");
}
// this는 호출한 객체 자신을 나타내는 키워드
public Ex6(int num) { // Ex6(int num):지역변수
this.num=num; // this=ob2-> this.num의 num은 전역변수 num
System.out.println("인자가 있는 생성자");
}
public void setNum(int num) {
this.num=num;
}
public int getNum(){
return num; // 실제로는 return this.num; 으로 this. 이 생략된 것임.
}
}
=======================================================================================================================================
예제7)
public class Test7 {
public static void main(String[] args){
Ex7 oo;
// System.out.println(oo); // 컴파일오류
Ex7 ob=null; // 객체의 null은 메모리를 할당하지 않은 초기상태.
System.out.println(ob);
// System.out.println(ob.a);// 런타임오류
ob=new Ex7();
int a=70;
ob.sub1(a); // a:실인수. 실인수와 가인수는 기억 공간 따로 확보.
System.out.println(a); // 70
System.out.println(ob.a); // 0
ob.sub2(ob);
System.out.println(ob.a); // 0
ob.sub3(ob);
System.out.println(ob.a); // 50
Ex7 ob1 = new Ex7();
Ex7 ob2=ob1;
ob2.a=100;
System.out.println(ob1.a);
System.out.println(ob2.a);
}
}
class Ex7{
int a;
public void sub1(int a){ // a:가인수. 메소드안에서만 유효하다. ->6번줄의 명령을 받아 50이 되었지만 메소드를 벗어나면서 70이된다.
a=50;
}
public void sub2(Ex7 oo){
oo=null;
}
public void sub3(Ex7 oo) {
oo.a=50;
}
}
예제7 결과)
null
70
0
0
50
100
100
=======================================================================================================================================
예제8)
public class Test8{
public static void main(String[] args) {
Ex8 ob1=new Ex8();
Ex8 ob2=new Ex8();
ob1.num=10;
ob2.num=10;
//Object 클래스 : 모든 클래스의 최상위 클래스
// toString() 메소드는 Object 클래스의 메소드로 하위클래스에서는 상위클래스의 메소드나 멤버변수를 자유로히 사용할 수 있다.
// 단 접근제어자가 private인 경우에는 사용 불가
//결과 : 클래스이름@해쉬코드
//해쉬코드는 VM이 객체를 빠르게 검색할 목적으로 사용되며 객체가 같으면 해쉬코드가 같지만
//해쉬코드가 같다고 같은 객체는 아니다.
System.out.println(ob1.toString());
System.out.println(ob2.toString());
System.out.println(ob1); //ob1.toString()와 동일
System.out.println(ob2);
System.out.println(ob1==ob2); // '==' 은 ob1과 ob2가 가리키는 위치가 같은지 비교
System.out.println(ob1.equals(ob2)); // ob1과 ob2가 가리키는 위치가 같은지 비교
}
}
class Ex8{ // 상위클래스 : Object
int num;
public void print() {
System.out.println("num:"+num);
}
}
예제8 결과)
Ex8@64883c
Ex8@2c1e6b
Ex8@64883c
Ex8@2c1e6b
false
false
'자바 > 객체지향' 카테고리의 다른 글
static 키워드 (0) | 2013.05.21 |
---|---|
업캐스팅 다운캐스팅 (0) | 2013.05.19 |
재정의(override), 중복정의(overloading) (0) | 2013.05.19 |
자바의 상속 (0) | 2013.05.19 |
객체지향을 위한 첫걸음 class 클래스 (0) | 2013.05.13 |