본문 바로가기
computing

20250522java11

by greentworkshop 2025. 5. 22.

***

 class Shape {
 public double getArea(double h,double w) {
 return h*w;
 }
 }
 
 class Triangle extends Shape {
 public double getArea(double h,double w) {
 return h*w*0.5;
 }
 }//얘가 shape를 오버라이딩함

public class OverridingTest {
	public static void main(String[] args) {
	//Triangle t= new Triangle();
	Shape t= new Triangle(); // 업캐스팅
	//Triangle t= new Shape(); //오류
	System.out.println(t.getArea(3.0, 4.0)); // 3.0*4.0*0.5 = 
	//6.0 객체의 유형에 맞게 메소드 실행 됨
	}
}

오버로딩 : 꼭 상속만 해당되는건 아님

오버라이딩 : 새로 만드는거

다형성 - 하나의 코드를 여러곳에서 재사용

class AA {
 public void func() { System.out.println("aa");
 }
 }
 class BB extends AA {
 public void func() { System.out.println("bb");
 }
 }
 class CC extends BB {
 public void func() { System.out.println("cc");
 }
 }
 
 

 public class MainAA {
 public static void main(String[] args) {
 AA aa =new BB(); 
 //BBaa=new BB();
 aa.func();
 aa=new CC();
 aa.func();
 }
}

메소드를 오버라이딩 하는경우 상위클래스의 메소드 한정자보다 허용범위가 넓은 경우에만 허용되고,

그 반대의 경우는 허용되지 않는다.

“public” → “protected” → “한정자 사용 안 함”

 

class D1 {
 int x = 1000;
 void display() {
 System.out.println("상위 클래스 D1의 display() 메소드입니다"); }
 }
 class D2 extends D1 {
 int x = 2000;
 void display() {
 System.out.println("하위 클래스 D2의 display() 메소드입니다"); }
 void write() { display();
 super.display();
 System.out.println("D2 클래스 객체의 x 값은 : " + x);
 System.out.println("D1 클래스 객체의 x 값은 : " + super.x); }
 }
 public class SuperTest2 {
 public static void main(String[] args) {
 D2 d = new D2();
 d.write(); }
 }
class SD1 {
 public int i1;
 public double d1;
 public SD1(int i1) {
 System.out.println("SD1(int i1) 생성자수행");
 this.i1 = i1 * i1 ;
 System.out.println(i1 +"의2제곱은: "+this.i1);
 }
 public SD1(double d1) {
 System.out.println("SD1(double d1) 생성자수행");
 this.d1 = d1 * d1 ;
 System.out.println(d1 +"의2제곱은: "+this.d1);
 }
 }
 
  class Sub1 extends SD1 {
 public Sub1(int i1) {
 super(i1); 
System.out.println("Sub1(int i1) 생성자수행");
 this.i1 = this.i1 * i1 ;
 System.out.println(i1 +"의3제곱은: "+this.i1); }
 public Sub1(double d1) {
 super(d1); 
System.out.println("Sub1(double d1) 생성자수행");
 this.d1 = this.d1 * d1 ;
 System.out.println(d1 +"의3제곱은: "+this.d1); }
 }
 public class SuperTest3 {
 public static void main(String[] args) {
 Sub1 sub1= new Sub1(10);
 Sub1 sub2 = new Sub1(10.5);
 }
 }

 

자식이 상속받으면 부모의(super  class) 생성자까지도 다 가져와서 실행

 

객체를 생성할 수 없는 

//추상 클래스의 상속과 구현

abstract class DD {abstract public int add(int a, int b);}

class C extends DD{
	public int add(int x, int y) {return x+y;}
	public void show() {
		System.out.println("");
	}
}


public class Ex1 {
	public static void main(String[] args) {
		C c=new C();
		c.show();
		System.out.println(c.add(5,10));
	}
}
abstract class Calculator {
	public abstract int add(int a, int b);
	public abstract int subtract(int a, int b);
	public abstract double average(int[] a);
}

class GoodCalc extends Calculator {
	public int add(int a, int b) {return a + b;}

	public int subtract(int a, int b) {return a * b; }

	public double average(int[] a) {
		int sum = 0;
		for (int i : a) {
			sum += i;
		}
		return (double) sum / a.length;
	}
}

public class Task {
	public static void main(String[] args) {
		GoodCalc c = new GoodCalc();
		System.out.println("add: " + c.add(2, 2));
		System.out.println("subtract: " + c.subtract(2, 2));
		System.out.println("average: " + c.average(new int[]{5, 4}));
	}
}

 

'computing' 카테고리의 다른 글

java 코드정리 - default  (0) 2025.06.12
20250519_DB8 트랜잭션, 동시성 제어  (0) 2025.05.19
20250515java10  (0) 2025.05.15
20250508_java10  (0) 2025.05.08
나는 언제쯤 행복해질까?  (0) 2025.05.08