java 오버라이딩, 업캐스팅, 다운캐스팅

2024. 5. 17. 11:08java

메소드 오버라이딩

class Shape {
public double getArea(double h,double w) {
return h*w;
}
}

Shape 클래스 의 getArea 메소드

class Triangle extends Shape {
public double getArea(double h,double w) {
return h*w*0.5;
}
}

를 상속받은 Triangle 클래스에서 

같은 리턴형, 접근지정자, 파라미터 값을 주고 이름도 같게함

단 기능만 다르게 한다

이를 메소드 오버라이딩 이라고 함

객체 선언 시 각 객체에 맞는 메소드를 실행한다.(다형성)

클래스 상속에서의 접근

package sampletest;

public class Person {
	String name;
	String id;
	public Person(String name) {
		this.name=name;
	}
	

}
class Student extends Person {
String grade;
String department;
public Student(String name) {
super(name); } }

person클래스 <- student클래스(상속받음) 학생클래스는 사람클래스의 메소드, 데이터필드 접근가능함

사람클래스는 학생클래스의 데이터필드, 메소드 접근불가함

super(name);은 슈퍼클래스의 데이터필드에 접근함

업캐스팅

package sampletest;

public class UPcastingex {

	public static void main(String[] args) {
		Person p;
		Student s=new Student("홍길동");
		s.grade="A";
		System.out.println();
		p=s;
		System.out.println(p.getName());

	}

}

업캐스팅:사람형 참조변수 p 생성 학생형 참조변수 s를 생성 ->new연산자로 student객체 생성

s.grade는 접근가능 하지만 p=s;이후 //p.grade="B";는 접근불가능 사람형 객체변수에서 학생형으로 접근하려 하기 때문에

(묵시적 형변환) 

다운캐스팅

package sampletest;

public class UPcastingex {

	public static void main(String[] args) {
		
		Person p=new Student("홍길동");
		Student s=(Student)p;
		System.out.println(p.getName());

	}

}

 

다운캐스팅: 사람형 객체변수를 학생형 객체변수에 cast연산없이 넣으려하면 오류가 남

왜와이 p는 슈퍼클래스이고 s는 자식클래스 슈퍼->자식은 접근이 불가하니 오류

슈퍼에서 자식으로 다운되는거라 다운캐스팅이라고 함 (명시적 형변환)

samp a=new samp(3);
samp b=new samp(4);

a=b;

객체치환: 여기서 a의 값은 4가 됨 값을 넘겨주는 것이 아니라 a 참조변수에 b의 주소값을 넘겨주는 것

this()

package sampletest;

public class Book {
	String title;
	String author;

	void show() {
		System.out.println(title + " " + author);
	}

	public Book() {
	this("기본", "기본");
	System.out.println("공백생성자");
	}

	public Book(String title) {
		
		this(title, "작자미상");
	}

	public Book(String title, String author) {
		this.title = title;
		this.author = author;
	}

	public static void main(String[] args) {
		Book littlePrince = new Book("어린왕자", "생텍쥐페리");
		Book loveStory = new Book("춘향전");
		Book emptyBook = new Book();
		loveStory.show();
		emptyBook.show();
	}
}

this(매개변수,매개변수) 이런 형식은 

this.title =title 이거랑 똑같은데 단축 형식같은 것임

 

'java' 카테고리의 다른 글

java 추상 메소드  (0) 2024.05.17