728x90

 

상속(Inheritance)

부모 클래스가 가지고 있는 멤버(필드or메소드)를 자식 클래스에게 넘겨주는 것

자식은 부모를 확장한 것

다른 클래스가 가지고 있는 멤버(필드, 메소드)들을 새로 작성할 클래스에서 직접 만들지 않고 상속을 받음으로써, 새 클래스가 자신의 멤버처럼 사용할 수 있는 기능

 

명령어 : extends

[접근제한자] class 클래스명 extends 클래스명{}

 

 

상속 명칭

부모클래스 = 조상클래스 = 상위클래스(super class)

자식클래스 = 자손클래스 = 하위클래스(sub class)

 

 

상속 목적

1.클래스의 재사용 가능

2.공통적인 규약 정의

 

 

상속 장점

1.코드량 감소

직접 만들지않고 부모클래스를 가져다 쓰기 때문

적은 양의 코드로 클래스 작성 가능

 

2.코드 추가,삭제,변경 용이

부모클래스의 데이터가 공통분모가 되서 일괄변환됨

코드를 공통적으로 관리하기 때문에 코드 추가/변경 용이

 

3.중복 제거 → 생산성,유지보수up

 

 

상속 특징

1.모든 클래스는 Object클래스의 후손(=Object는 최상위 클래스)

    Object클래스가 제공하는 메소드를 오버라이딩하여 메소드 재구현 가능

         ex) java.lang.String 클래스의 equals()와 toString()

부모클래스로부터 멤버(필드,메소드) 받아오는 것

 

2.부모 클래스의 생성자, 초기화 블록은 상속 안됨

자식 클래스 생성 시, 부모 클래스 생성자가 먼저 실행

자식 클래스 생성자 안에 부모 클래스 생성자를 호출하고 싶으면 super() 활용

    - 부모클래스에 접근하는 방법 : super()

 

3.부모의 private멤버는 상속은 되지만 직접 접근 불가

자식 객체 생성 시에 부모의 필드 값도 전달 받은 경우, 자식 생성자 안에서 부모의 private 필드에 직접 접근하여 대입 불가

(private 접근 범위, 해당 클래스 안이기에 직접적으로는 접근 불가)

 

접근 하는 방법

  1. super() 이용하여 전달받은 부모 필드 값을 부모 생성자 쪽으로 넘겨 생성
  2. setter, getter 메소드를 이용하여 접근

 

*부모클래스와 자식클래스의 주소값은 다르다

(=참조하고 있지 않다는 의미. 주소값이 다르기에 )

부모클래스의 객체 주소값은 고정되어있지 않다

자식 클래스라고 해서 부모클래스가 그대로 들어가지 않는다

 

 

자바의 단일상속, 다중 상속

※ 다중 상속

C++에서 사용 가능한 기능

여러 클래스로부터 상속이 가능하며 복합적인 기능을 가진 클래스를 쉽게 생성 가능

    - 서로 다른 클래스로부터 상속받은 멤버 간의 이름이 같은 경우 문제 발생

 

자바에서 다중상속 불가

단일 상속만 가능. 만약 다중상속이 필요하면 단일 상속을 여러번 사용해서 구현 가능

하나의 자식에 여러 부모 불가

하나의 부모에 여러 자식 가능

화살표 : 아래에서 위로

자식이 부모를 가리키는 것

고로, 자식 클래스에서 부모클래스를 화살표가 가리켜야 한다

상속에서 쓰이는 화살표는 머리가 빈 화살표시

 

 

상속 시 딱 하나만 상속 받아오는 것

자바에서는 다중상속하지 않고 단일 상속을 지원함

why?

어느 클래스에서 받아왔는지 알기가 어려워지기 때문 단일 상속만 지원

클래스간의 관계가 다중 상속보다 명확하고 신뢰성 있는 코드 작성가능

 

자바에서 다중상속이 필요한 경우,

단일 상속을 여러번해서 다중상속을 표현할 수 있다

 

 

※ 해당 필드나 getter,setter가 어느 클래스에 속한지 알아볼 때 유용한 팁

대쉬 안에 있는건 어디 안에 있는 메소드인지 보여주는것

 

 

상속의 예시

Object에 있는 메소드들

어떻게 들어가 있을 수 있을까?

모든클래스는 object클래스 후손이기 때문

내가 만든 클래스(사용자 정의 클래스)도 object의 후손이기 때문에 object 안에 있는 클래스들을 다 상속 받은거고 사용할 수 있는 것

.

java.lang.Object

모든 클래스의 부모클래스

최상위 클래스라고 부른다

 

 

728x90
반응형
728x90

 

css 선택자(selector)를 이용하여 div태그를 포함한 여러 태그에

css를 적용시키는데

자손, 후손 등 복잡하게 선택자가 들어가다보면 중간에 원하는 속성(property)가 안먹혀서 애먹은 경험들이 많이 있을 것이다

그럴 때 이 :not() selector를 사용하여 적용이 안되게끔 하면 된다

부모 Element의 style 중 특정 Element의 style이 특정 부분에 적용되지 않도록 하는 기능

.codeTest
{
	paddingt: 2%;
	background-color:blue;
}


.codeTest :not(.codeTableTest)
{
	padding:2%;
	background-color:blue;
}

 

위의 코드는 :not()을 안써서 부모 상속 때문에 코드가 적용이 안되고

아래 코드는 :not()를 사용하여 부모 상속을 무효화 했기에 패딩과 백그라운드 코드가 작동하게 된다

 

좀 더 자세한 내용은 아래에

https://www.w3.org/wiki/CSS/Selectors/pseudo-classes/:not#Pseudo-class_:not

728x90
반응형
728x90

아래 이미지는 1번 파일을 0번 파일이 상속했다

자식 클래스 부모 클래스의 이름을 눌러보면 부모클래스와 연결되어있는 코드들의 색깔이 진해진다

이 코드들은 중복이기에 삭제하여도 부모와 자식 클래스의 정보가 연동된다

 

삭제 전

삭제 후

0번 parent 

1번 child1

2번 child2

상속관계가 0 -> 1 -> 2

1번이 0번을 상속하고 2번이 1번을 상속한 것

 

1번 child1에서 parent에 받았던 a,b부분들을 주석 처리해서 2번 child2에서 보면 정보가 그대로인 걸 알 수 있다

 

public class practice_everyday04 {
	public static void main(String[] args) {
		
		// run
		practice_everyday04_0 pe1 = new practice_everyday04_0();
		pe1.println();
		
		practice_everyday04_1 pe2 = new practice_everyday04_1();
		pe2.println();
		
		practice_everyday04_2 pe3 = new practice_everyday04_2();
		pe3.println();
		
	}	
}
public class practice_everyday04_0 {
	
	// Parent
	private int a;
	private int b;
	
	public practice_everyday04_0() {}
	public practice_everyday04_0(int a, int b) {
		this.a = a;
		this.b = b;
	}
	//getter & setter
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;	
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	
	
	public void println() {
		System.out.println("parent");
	}
	
}

 



public class practice_everyday04_1 extends practice_everyday04_0 {
		
	// child1
//	private int a;
//	private int b;
	private int c;
	
	public practice_everyday04_1() {}
	public practice_everyday04_1(int a, int b, int c) {
//		this.a = a;
//		this.b = b;
		this.c = c;
	}
	
	// getter & setter
	// setter : 데이터를 변수에 저장하는 메소드
	// getter : 저장된 데이터를 불러오는 메소드
//		public int getA() {
//			return a;
//		}
//		public void setA(int a) {
//			this.a = a;	
//		}
//		public int getB() {
//			return b;
//		}
//		public void setB(int b) {
//			this.b = b;
//		}
		public int getC() {
			return c;
		}
		public void setC(int c) {
			this.c = c;
		}
		
	@Override	
	public void println() {
		System.out.println("child1");
	}
	
}

 

// 상속 & overriding
public class practice_everyday04_2 extends practice_everyday04_1{
	
	// child2
	private int a;
	private int b;
	private int c;
	private int d;
	
	public practice_everyday04_2() {}
	public practice_everyday04_2(int a, int b, int c, int d) {
		this.a = a;
		this.b = b;
		this.c = c;
		this.d = d;
	}
	
	// getter & setter
		public int getA() {
			return a;
		}
		public void setA(int a) {
			this.a = a;	
		}
		public int getB() {
			return b;
		}
		public void setB(int b) {
			this.b = b;
		}
		public int getC() {
			return c;
		}
		public void setC(int c) {
			this.c = c;
		}
		public int getD() {
			return d;
		}
		public void setD(int d) {
			this.d = d;
		}
	@Override
	public void println() {
		System.out.println("child2");
	}
		

	
	
		
}

 

728x90
반응형
728x90

 

상속과 관련된 중요 키워드

this자기 자신

super자신의 부모

 

cal3클래스의 sum메소드는 부모클래스인 cal의 sum메소드를 오버라이딩하고 있음

이 코드가 엄청나게 복잡한 코드였다면 같은 기능의 코드를 중복해서 쓰는 낭비가 많았을 것

class Cal111 {
	public int sum(int v1, int v2) {
		return v1+v2;
	}
	public int sum(int v1, int v2, int v3) { // 같은 이름 메소드 // int v3 추가
		return v1+v2+v3;
	}
}
class Cal333 extends Cal11{		// extends : Cal1을 상속
	public int minus(int v1, int v2) {
		return v1-v2;			// Cal3는 이제 부모 클래스가 없는 마이너스 기능도 탑재
	}
	public int sum(int v1, int v2) {
		System.out.println("Cal3!!");
		return v1+v2;
	}
}

이럴 때 계승 발전 시키면 매우 유리할 것

자식 클래스의 메소드(sum)가 부모 클래스의 메소드(sum)를 호출하고 그 결과를 이용할 수 있다면 편리할 것. 이때 쓰는 것이 super

 

super.

자식 클래스의 메소드가 부모 클래스의 메소드를 호출하고 그 결과를 이용하는 것

super.부모클래스의 메소드명;

public int sum(int v1, int v2){
		return super.sum(v1,v2);
}

super가 잘 작동하는지 체크해보고 싶다면?

브레이크포인트 걸고 디버깅 해볼 것

 

this.

class Cal111 {
	// this
	// 자기 자신을 뜻함
	public int sum(int v1, int v2, int v3) { 
		return this.sum(v1,v2)+v3;	    // .sum() 자기자신
	}
}

 

 

전체코드

// Java 상속 - 4. this & super

class Cal111 {
	public int sum(int v1, int v2) {
		return v1+v2;
	}
	// this
	// 자기 자신을 뜻함
	public int sum(int v1, int v2, int v3) { // 같은 이름 메소드 // int v3 추가
		return this.sum(v1,v2)+v3;	// .sum() 자기자신
	}
}
class Cal333 extends Cal11{		// extends : Cal1을 상속
	public int minus(int v1, int v2) {
		return v1-v2;			// Cal3는 이제 부모 클래스가 없는 마이너스 기능도 탑재
	}
	
	// super
	// 부모를 뜻함
	public int sum(int v1, int v2) {
		System.out.println("Cal3!!");
		return super.sum(v1,v2);	// .sum()은 부모클래스 sum()
	}
}

public class Inheritance04 {
	public static void main(String[] args) {

		Cal111 c1 = new Cal111();
		System.out.println(c1.sum(2,1));
		System.out.println(c1.sum(2,1,1));
		
		Cal333 c3 = new Cal333();
		System.out.println(c3.sum(2,1));
		System.out.println(c3.minus(2,1));	// 자식클래스에 추가된 minus기능
		
	}
class Cal222 {
	public int sum(int v1, int v2) {
		return v1+v2;
	}
	public int minus(int v1, int v2) {
		return v1-v2;
	}
}
}
728x90
반응형
728x90

 

web1-11. 최후의 문법 속성 & img

태그름만으로는 정보가족할 있다

<img src=“이미지파일.jpg” width=“100%>

Attribute

Src = source

 

*Unslash 작권 상관없이 이미지 있는 싸이트!

 

 

web1-12. 부모자식과 목록

부모(parent) : 다 태그함하는 태그

(child) : 다 태그에 속하는 태그

<parent>

<child></child>

</parent>

 

 

<br> 줄바 태그

<li><li> : List, 목차태그

<ul></ul>  : 순서x, Unordered List

<ol></ol> : 순서있는 리스트, Ordered List

 

li : 자 태그로써 반드시 부모태그가 필요

  • 어디서부터 어디까지 연관된 항목인지 짓는다(grouping)

ul : 부모태그로써 반드시 태그가 필요

<ul>

<li>egoing</li>

<li>youbin</li>

</ui>

(위 배울과 아래 참여자. 이렇게 li,ul사)

 

 

*콘트롤+클릭(윈도우즈) : 다중으로 클로즈태그성가능

 

 

 

 

web1-13. 문서의 구조와 슈퍼스타들

사용빈도수가 높은

 

<!doctype html> 관용적으로 서두에 html문서를 나타내 의미로

<html></html> 최고 태그

<head></head>

<body></body>

<title></title> : 웹페이지. 인터넷창의 탭에 보이. 본문

<meta></meta> : 본문

 

<meta charset=“utf-8”>

  • uft-8 열어라는 의미
  • uft-8 만들었으면 uft-8 열어야 안깨짐
  • 컴퓨터가 01 인식가능하고 데이터종적으로 01로저장함
  •  01 어떻게장할지 여러가지 약속들이 존재하는데 하나가 uft-8 
  • Cha : character 문자라 의미
  • Set : 칙이라는 의미

 

위에 코드들은 본문을

아래있는 코드들은 본문

 

Html 코드들은 <head> <body> 하나에 반드시 놓이게된다

태그 위에 <html> 쓴다

 

 

728x90
반응형

'웹 관련 > └생활코딩 WEB1' 카테고리의 다른 글

생활코딩 WEB1 : 19-19.3  (0) 2021.12.17
생활코딩 WEB1 : 17-18  (0) 2021.12.12
생활코딩 WEB1 : 14-16  (0) 2021.12.12
생활코딩 WEB1 : 08-10  (0) 2021.11.08
생활코딩 WEB1 : 01-07  (0) 2021.11.06

+ Recent posts