메서드(Method) 선언과 호출
// 메서드 선언
public void getInfo(String who){
// public: 접근자
// void: 반환형
// getInfo: 메서드이름
// String who: 매개변수
// 메서드 정의
System.out.println("12");
}
// 호출
ClassMate class1 = new ClassMate();
class1.getInfo("John");
매개변수(Parameter)
메서드를 호출할 때 데이터를 전달할 수 있다
중복 메서드(Overloding)
이름은 같고, 매개변수의 개수 또는 타입이 다른 메서드를 만들 수 있다
메소드의 이름은 같고, 매개변수의 갯수, 타입, 순서는 달라야 한다
단, 리턴 값만 다른 경우 오버로딩을 할 수 없다
public void getInfo() {
System.out.println("Hello");
}
public void getInfo(int num1) {
System.out.println("Hello %d",num1);
}
public void getInfo(int num1, int num2) {
System.out.println("Hello %d %d", num1, num2);
}
// 매개변수의 순서가 다른 경우
public void getInfo(int num1, double num2) {
System.out.println("Hello %d %f", num1, num2);
}
public void getInfo(double num2, int num1) {
System.out.println("Hello %d %f", num1, num2);
}
오버 라이딩(overriding) -> 상속개념 이해 필요
상위 Class에서 정의한 메서드를 하위 Class에서 사용하는 것
또한, 하위 Class에서 메서드를 재정의해서 사용할 수 있다
class Dog{ // 상위 클래스
public int age;
public String color;
// 메서드
public void getInfo(){
System.out.println("나이는 "+age+"이고 색은 "+color+"입니다");
}
}
class Cat extends Dog{ //Dog를 상속받음
String eyeColor;
public void getInfo() {//상위 클래스에 있는 getInfo()메서드를 재정의
System.out.println("눈은 "+eyeColor+"색입니다");
}
}
public class MainClass {
public static void main(String[] args) {
//Cat 객체 생성
Cat catt = new Cat();
//변수 설정
catt.age = 1;
catt.color = "white";
catt.eyeColor = "blue";
//호출
catt.getInfo();
}
}
--- result ---
눈은 blue색입니다
상위 클래스에 있는 getInfo 메서드도 호출하고 싶다면??
class Dog{ // 상위 클래스
public int age;
public String color;
// 메서드
public void getInfo(){
System.out.println("나이는 "+age+"이고 색은 "+color+"입니다");
}
}
class Cat extends Dog{ //Dog를 상속받음
String eyeColor;
public void getInfo() {//상위 클래스에 있는 getInfo()메서드를 재정의
super.getInfo();
System.out.println("눈은 "+eyeColor+"색입니다");
}
}
public class MainClass {
public static void main(String[] args) {
//Cat 객체 생성
Cat catt = new Cat();
//변수 설정
catt.age = 1;
catt.color = "white";
catt.eyeColor = "blue";
//호출
catt.getInfo();
}
}
--- result ---
나이는 1이고 색은 white입니다
눈은 blue색입니다
하위 클래스에서 메서드를 재정의 할 때,
1. super.getInfo()를 사용
2. 상위 클래스의 메서드를 똑같이 작성한다
System.out.println("나이는 "+age+"이고 색은 "+color+"입니다");
접근자
메서드를 호출할 때 접근자에 따라서 호출이 불가할 수 있다
public void getInfo1(){
System.out.println("호출 가능");
}
private void getInfo2(){
System.out.println("호출 불가능");
}
객체와 메모리
메모리에서 객체 생성(동적 생성)
객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 필요 없게 되면 GC(Garbage Collector)에 의해서 제거
레퍼런스
생성한 객체의 주소를 변수에 저장하는 것을 레퍼런스라고 한다
같은 클래스에서 객체를 생성했을 때, 모두 다른 주소를 갖는다
Dog d1 = new Dog();
Dog d2 = new Dog();
Dog d3 = new Dog();
System.out.println("d1 addr: "+d1);
System.out.println("d2 addr: "+d2);
System.out.println("d3 addr: "+d3);
--- result ---
d1 addr: basic.Dog@2d363fb3
d2 addr: basic.Dog@7d6f77cc
d3 addr: basic.Dog@5aaa6d82
자료형이 같아도 다른 공간에 존재하는 객체는 다른 객체이다
null과 NullPointException
레퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없다
Dog d1 = new Dog();
System.out.println("d1 addr: "+d1);
d1.play();
d1 = null;
System.out.println("d1 addr: "+d1);
d1.play();
--- result ---
d1 addr: basic.Dog@2d363fb3
play
d1 addr: null
Exception in thread "main" java.lang.NullPointerException
at basic.MainClass.main(MainClass.java:26)
정리
오버라이딩(재정의) -> 이름 동일, 내용 다름
오버로딩(중복정의) -> 이름 동일, 파라미터(매개변수) 다름
'Study > Java' 카테고리의 다른 글
[Java] 패키지와 static, 패키지 은닉 (0) | 2020.07.02 |
---|---|
[Java] 생성자와 소멸자 그리고 this 키워드 (0) | 2020.07.02 |
[Java] 클래스와 객체의 생성 (0) | 2020.07.01 |
[Java] 배열 & 조건문 & 반복문 (0) | 2020.07.01 |
[Java] 변수 & 자료형 & 연산자 (0) | 2020.06.29 |
댓글