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
반응형
'IT_Web > Java' 카테고리의 다른 글
Java 활용해서 기본 템플릿 양식 넣고 메일 보내기 (0) | 2022.09.07 |
---|---|
Java 엑셀 데이터 읽어오기 및 다중 insert 한방에 하기 (1) | 2022.08.05 |
[Java] 접근제어자 public, static, 기타제어자 활용법 (0) | 2020.06.18 |
[Java] 상속자, 은닉변수, super(), this의 활용 (0) | 2020.06.14 |
[java] 객체모델링(멤버변수, 매개변수, 로컬변수)활용 및 메서드 (0) | 2020.06.13 |