[day11]

1. 상속 inheritance
1) 클래스와 클래스 사이(1:1)의 부모자식 관계를 만듬.
2) 자바 다중상속 x
3) 상속은 부모의 변수, 메서드들을 물려받는것.
4) 상속시, 생성자와 초기화 블럭은 제외
5) 상속 키워드 : extends
6) 필요한 이유 : 코드 중복 제거 -> 클래스를 간격하게 구현,
 유지보수가 편함, SW생성산 향상.
부모클래스 = super = parent = base
자식클래스 = sub     child    derived

class Object{}  // 조상님 (자동으로 상속받는 *자바 기능들)
class Parent{} // 할아버지 할머니 : x
class Child extends Parent{}    //아빠 엄마        : x, y
class Child2 exnteds Parent{}    //삼촌?..남       : x, z
class GrandChild extends Child{} //아들 딸         : x,y ,a ,b

7) Object 클래스 : 모든클래스의 조상
자바에서는 모든 클래스가 자동으로 Object 클래스를 상속받는다.
모든 클래스는 object 클래스의 맴버를 모두 사용할 수 있다.
object 클래스는 11개의 메서드만 가지고 있다.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html

2. 상속과 접근자
1) 부모 클래스의 private 맴버
오직 부모안에서만 사용가능, 자식 클래스 포함해서 다른 모든 클래스에서 접근x

2) 부모 클래스의 default 맴버
같은 패키지라면 가능, 자식이라도 다른 패키지라면 접근 x

3) 부모 클래스의 public 멤버
모든 곳에서 접근 허용

4) 부모 클래스의 protected 멤버
같은 패키지의 속한 모든 클래스에서 접근 가능,
패키지 상관없이 자식이라면 어디서든 접근 가능


3. final
1) final 클래스 :
클래스 앞에 붙으면, 상속할 수 없다 (부모가 될 수 없다)
final class FinalClass{}
class A extends FinalClass{}  X

2) final 매서드
메서드 앞에 붙으면, 오버라이딩 할 수 없음 선언함.
class Super {
final void test(){AAA}

class Sub extends Sup[ // test 
@override
void test(){BBB---> x

3) final 변수 : 상수 
변수 앞에 붙으면, 상수가 된다.
상수는 한번 초기화(값대입) 되면 값을 변경할 수 없다.

final int ROW = 10;
ROW = 20; ---> X 수정안됨!!!

final 키워드를 public static과 함께 선언하면
프로그램 전체에서 사용할 수 있는 상수가 된다.
ex) public static final double PI = 3.14.....;

 

package day11;
//상속
class Super{
	static int a = 1000;
	int x = 10;
	
}

class Sub extends Super{// x, y
	int y = 20;
	
}
public class ClassEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Sub s = new Sub();
		System.out.println(s.x);
		System.out.println(s);
		System.out.println(s.toString());  // object로 부터 물려받은 메서드
		System.out.println(Sub.a);
		
		System.out.println(Sub.a);
		System.out.println();
	}
}

 

 

package day11;
// 상속을 이용하여 아래 클래스들을 간결한 구조로 재 작성해보세요
class GetSetter{
	public void getset() {
		
	}
}


class pen{
	private int amount;
	public int getAmount(){return amount;}
	public void setAmount(int amount) {this.amount = amount;}
	
}

	
class SharpPencil extends pen{
	private int width;
}

class Ballpen extends pen{ //color, (amount), get/set amount
	private String color;
	public String getColor() {return color;}
	public void setColor(String color) {this.color = color;}
}

class Fount extends Ballpen{ 
		public void refill(int n) {setAmount(n);}
	
	
}
public class ClassEx02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	}
}
package day11;
/*
final class SuperClass {
}
class Subclass exntends SuperClass{
	
}
class Test exntends Math{
} */

class SuperClass{
	final void add() {System.out.println("aaa");}
}

class SubClass extends SuperClass { //add()
		//void add() { System.out.println("bbb");
		//}
}
class Test{
	final static int x = 10;
	final int y = 20;

	//명시적으로 초기화 한 경우 생성자에서 값 대입 불가
	final int X;
	
	// 명시적 초기화를 하지 않고 생성자에서 값 대입하는것은 가능
	// 해당 객체 안에서는 객체 생성시 던져준 값을 X에 넣고 상수로 값 변경없이
	// 	고정값으로 사용하고싶은데  그 값이 객체마다 조금 달라져야 할 경우
	Test(int x){
		this.X=x;
	}
}
public class ClassEx03 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test t = new Test(10);
		System.out.println(t.x);

		System.out.println(Test.x);
		//Test.x = 100;  x에 final이 붙어있어서 불가능 //20
		
		//Test t = new Test();
		System.out.println(t.y);
		/*	SubClass sub = new SubClass();
			sub.add();*/
		
	}

}
package day11;

public class Math {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	      
	      int[][]score = {
	            {100,70,50},
	            {70,50,30},
	            {50,80,70},
	            {55,85,77},
	            {100,80,75}
	         };
	      
	      int korTotal = 0;
	      int engTotal = 0;
	      int mathTotal = 0;
	      
	      int totalSum = 0;
	      int totalAvg = 0;
	      
	      System.out.println("번호\t국어\t영어\t수학\t총점\t평균\t");
	      System.out.println("===============================================");
	      
	      for(int i = 0; i < score.length; i++) {
	         int sum = 0;
	         double avg = 0.0;
	         
	         korTotal += score[i][0];
	         engTotal += score[i][1];
	         mathTotal += score[i][2];

	         System.out.print(i+1);
	         for(int j = 0; j < score[i].length; j++) {
	            sum += score[i][j];
	            System.out.print("\t" + score[i][j]);
	         }
	         totalSum += sum;
	         avg = sum / score[i].length;
	         totalAvg += avg;
	         System.out.print("\t" + sum + "\t" + avg);
	         System.out.println();
	      }

   
	}
}

+ Recent posts