본문 바로가기

프로그래밍/JAVA

(11)
private 메소드를 하위에서 다시 만들어서 호출 할 때 class Animal{ private void show() { System.out.println("animal"); } } class Human extends Animal{ public void show() { System.out.println("Human"); } } class Test { public static void main(String args[]) { Animal a = new Human(); a.show(); } } compile error : show() has private access in Animal a 객체는 a의 명세를 가지고 메소드를 호출하는 데, a의 명세에서 보면, show는 private이기 때문에 실행 시에는 실제 객체가 생성된 Human show()에 접근하겠지만, ..
자바 String 문자열.. - When are two Strings EQUAL? String 클래스는 자바 개발자에게 있어서 다른 클래스 객체와는 다르게 다뤄진다. 먼저 다음과 같이 new String을 하여 초기화 할 수 있다. String string = new String("The Plming Space"); ← 이러한 방법을 추천하지는 않는다. 혹은 다음과 같이 초기화도 가능하다. String string = "The Plming Space"; 문자열을 비교할 때는 equals 메서드와 혹은 == 동등연산자를 이용해서 비교가 가능하고, 때에 따라서 어떤 경우에 true를 리턴하는지를 확인하는 것이 여기서의 목표이다. 다음의 코드를 확인하면, class Equals { public static void main(String[] args) { Double object1 = new..
Singleton Test 싱글톤 디자인패턴 한 클래스에서 하나의 객체만 만들고자 할 때. 1. 생성자를 private로 만든다. 2. 내부 static 변수로 생성자를 이용해서 객체를 하나 생성한다. 3. public으로 생성된 객체 하나(2번에서 만든 static변수)를 리턴해주는 메소드를 만든다. public class SingletonTest{ public static void main(String[] args){ Company c = Company.getCompany(); Company c1= Company.getCompany(); // Company c2 = new Company(); // 생성자가 private 이므로 외부에서 객체 생성 불가 System.out.println(c); System.out.println(..
키보드 입력받는 방법 패키지 명 java.lang.System (in) java.io.InputStream (read) java.io.BufferedReader (readLine) 메소드 명 in (필드) public static final InputStream in read (메서드) abstract int read() / int read(byte[] b) readLine (메서드) String readLine() 기 능 표준 입력 스트림. / 키보드 입력을 받을 수 있게 해 줌. in은 바이트스트림을 입력받기 때문에 한글을 받을 수 없으며, 한글을 받기 위해서는 바이트스트림을 문자스트림으로 바꾸는 기능을 하는, InputStreamReader 클래스와 사용. 만약, 라인 단위로 문자를 입력받고자 할 때에는 Buffered..
자바 접근제어자 자바의 접근제어자 ◇ 범위 private < default < protected < public ◇ private (-) 해당 클래스 내에서만 사용 ◇ package friendly (class default) 동일 패키지 안에서만 사용 ◇ protected (#) 동일 패키지와 해당 클래스를 상속받은 서브 클래스에서만 사용 가능 ◇ public (+) (interface default) 모든 패키지와 클래스에서 사용 가능. ◇ 메소드 오버라이딩과 접근제어자와의 관계? 메소드 오버라이딩 시에, 상속받아서 구현한 오버라이딩 된 메소드는 상위 클래스의 해당 메소드의 접근제어자와 반드시 같을 필요는 없는지만, 범위가 같거나 넓은 범위로 정해야 한다. ◇ 클래스의 public과 default (클래스는 priv..
클래스 패스 java -classpath classes world.CountryUser 패키지.클래스명 으로 실행. src 위치에서.. CountryUser 클래스가 world 패키지 안에 존재하고 CountryUser 클래스는 world.Asia 패키지 안에 있는 것을 참조할 때.. CountryUser 클래스 자체가 world 패키지 안에 존재하므로, 패키지 명을 통해서 접근해서 실행
class 캐스팅 ◇ Lvalue의 상위 클래스(father)이고, Rvalue가 하위 클래스(son:father을 상속받은)로 메모리를 생성할 때 별도의 타입캐스팅이 없이 가능. father fa = new son(); ◇ 이 때 fa의 참조변수로 메소드의 호출 시에는 son 클래스의 메소드가 호출 됨. 단, son 클래싀 모든 메소드에 접근 가능한 것은 아니며, father 클래스가 가지고 있는 명세에 있는 메소드만 호출 가능이 가능하다. ◇ 반대로 Lvalue 가 하위 클래스(son)이고, Rvalue가 상위 클래스(father)로 메모리를 생성 할 때는 타입 캐스팅 을 하지 않으면, 에러. 그러나, 타입캐스팅을 해서 생성한다고 해도 실제 사용 시에 런타임 에러 발생. 즉, 실제적으로 사용 불가함. 1. son s ..
추상클래스와 인터페이스 abstract VS interface 공 통 점 1. 추상클래스와 인터페이스는 객체 생성을 할 수 없다. 2. 멤버 함수의 선언부(원형:prototype)만 있고, 정의부(구현:Body)가 없는 메소드를 가진다. 3. 추상클래스와 인터페이스 모두 직접 사용하는 것이 아니라, 해당 추상 클래스와 인터페이스를 상속받아 서 구현을 해서 사용한다.4. 추상클래스와 인터페이스를 상속하여 만든 클래스의 객체의 참조변수로서 다형성을 구현할 수 있다. * 상위클래스의 참조변수로 하위클래스 객체 생성시 하위클래스에서 구현된 메소드 접근이 된다. 즉, 자바에서는 참조변수의 type이 중요한 것이 아니라, 실제 메모리에 생성된 type이 중요하다. 5. 추상클래스와 인터페이스 내의 추상메소드를 상속받아 구현한 곳에서 th..