728x90
반응형

# final

위치 : 마지막이라는 의미

의미 : 클래스 앞(상속금지), 메서드 앞(overriding 금지), 변수 앞(재할당 금지)

 

 

 

final 클래스 앞에 선언될 때 예문


final class A{ //final은 class에서 상속할 것이 없을 때 확장(상속) 금지를 선언할 때 사용한다

  static int a=100; //옆에 예문처럼 static만 선언되어있다면 상속할 필요가 없으므로

  static int b(){ return 200; }// final을 선언해서 상속하는 것을 막아야 한다

  } //static은 공용처럼 사용할 수 있으며 어떤 변수가 초기화하거나 재할당하게 되면
	//그 값은 독자적인 값으로 여러 객체생성을 하면 그 값은 한 개의 값으로 선언된다

class B extends A{ 

  void c(){

  System.out.println(a);

  }

}

class C{

  public static void main(String args[]){

    B o1=new B(); o1.a=300; = A.a=300; //가독성을 위해 변경해야한다

    B o2=new B(); o2.c();

  }

}


 

 

final 변수 앞에 선언될 때 예문


class A{

  final int num;



  A(int n){

    num=n; // 생성자에서 로컬변수의 최초 재할당은 가능하다.

    num=300; // 컴파일에러

  }

  void a(){

  num=400; // 컴파일에러

  }

}

interface A{ //자동으로 접근제어자 선언됨

  void abc(); 
  
} //interface를 선언하게되면 그 클래스 해당하는 메서드는 static final void abc();라는 형식이

숨겨져 있다 그래서 범위가 정해지고 public > protected > default > private

class B implements A{

  public void abc(){ //앞에는 public을 꼭 선언해야 오버라이딩을 할 수 있다

  } //그리고 interface를 선언하게되면 개체생성을 하지 못하고 구현개체를 개별로 선언해주고

} //부모상족자로 interface 클래스를 선언하여 interface가 가지고있는 메서드를 구현 개체에

//오버라이딩을 해서 구현하게된다

 

 

 

# 다형적변수

다형적 변수는 상속(확장) 관계에서만 허용되며, 자식 클래스의 오버라이딩된 메서드만 접근할 수 있다

 

 

추상클래스에서 추상메서드는 실행 바디를 생성할 수 없다 아래의 문장을 확인하자

 


abstract class Animal{ 

  abstract void sound(); //실행문인 {}가 제외되었다는것을 알 수 있다

  abstract void sound(); //이때 추상 클래스 추상 메서드를 선언하여 강제로 오버라이딩을 하게 한다

} //그 이유는 추상 클래스의 추상 메서드가 선언되면 상속자의 시그니쳐와 같은 형태의


class Dog extends Animal{ //오버라이딩을 해야 컴파일에러가 발생하지 않기 때문이다

  void sound(){ System.out.println("멍멍"); } //그래서 자식 상속자 클래스를 
  								// 작업하는 사람의 실수를 미연에 방지할 수 있다
}


class Duck extends Animal{// 다형적변수와 추상 클래스의 추상메서드는 반드시 함께 생각해야만 한다

  void sound(){ System.out.println("꽥꽥"); }

}


class Cat extends Animal{

  void sound(){ System.out.println("야옹"); }

}


class Sound{

  static void test(Animal s){

  s.sound();

  }
}


class A{

  public static void main(String[] args){

    Dog dog=new Dog();

    Duck duck=new Duck();

    Cat cat=new Cat();

    Sound.test(dog);

    Sound.test(duck);

    Sound.test(cat);

  }
}


 

# abstract

 

의미 : 추상적이라는 의미

위치 : 클래스 앞, 메서드 앞

 

추상 클래스는 객체를 생성할 수 없다

 


abstract class A{ 

  //클래스 간 확장(상속) 관계일 때 클래스 B도 추상 클래스를 선언해야

  int a=100; 		// 컴파일에러가 발생하지 않는다

} 			//또 한 추상 클래스가 선언된 클래스는 상속(확장) 관계인 클래스는

class B{			// 메서드 오버라이딩을 해야 컴파일 오류를 막을 수 있다

  public static void main(String[] args){

    A o=new A();

    System.out.println(o.a);

  }
}

--------------------------------------------------------

abstract class A{

  abstract void abc();

  void def(){ System.out.println(200); 
  
  }
}

abstract class B extends A{

  void def(){System.out.println(100); 
    
}




반응형

# 참조형간의 형변환

 

다형적 변수로 자식의 오버라이딩 되지 않은 메서드를 호출할 때 형변환을 사용한다. (상속 관계에서만 적용) 예문 확인

 


class A{

}

class B extends A{

  void abc(){ 
  
  	System.out.println(1); 

}


class C{

  public static void main(String[] args){

    B o1=new B();

    o1.abc(); // 1

    A o2=o1;

    o2.abc(); // 컴파일에러

    B o3=(B)o2;

    o3.abc(); // 1

  }
}

 


 

#수치형간의 형변환(정수, 실수, 문자)

 

 

byte(1) < short, char(2)< int(4)< long(8) < float(4) < double(8)

 

 


 

int a=10;

byte b=a; // 컴파일에러



byte a=10;

int b=a; // 자동형변환



double a=3.5;

int b=a; // 컴파일에러



double a=3.5;

int b=(int)a; // 강제형변환



int a=10; // 0이28개1010

byte b=10; // 00001010



char a='A';

char b=65;

char c='\u0041';

System.out.println(a);

System.out.println(b);

System.out.println(c);



System.out.println('A'+1); // 66

System.out.println("A"+1); // A1



float a=3.5; // 컴파일에러

float b=3.5F;

int c=5L; // 컴파일에러

int d=3D; // 컴파일에러




 

값자체를 의미할때 컴퓨터언어에서는 리터럴(literal) ==>

숫자D --> double형

숫자F --> float형

숫자L --> long형

 

0b숫자 --> 2진수표현

0숫자 --> 8진수표현

0x숫자 --> 16진수표현

 

 

[ex] 10진수65를 2진수로 표현하면?

단, java.lang.Integer클래스의 toBinaryString메서드를 이용한다.

 


[an]

class A{

  public static void main(String... args){

    String s=Integer.toBinaryString(65);

    System.out.println(s); // 01000001

  }

}





[ex] 10진수65를 16진수로 표현하면?

단, java.lang.Integer클래스의 toHexString메서드를 이용한다.



[an]

class A{

  public static void main(String... args){

    String s=Integer.toHexString(65);

    System.out.println(s); // 41

  }
}
728x90
반응형

+ Recent posts

Powered by Tistory, Designed by wallel