- 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다.
- this는 참조변수로 인스턴스 자신을 가리킨다.
- this.는 객체 자신을 가리키는 참조변수이다.
package ex7;
public class Employee {
int empno;
String ename;
String job;
int cont; // 정규직1 계약직2
String salType; //호봉제, 연봉제, 계약제
public Employee() {
}
public Employee(int empno, String ename, String job) {
this.empno = empno;
this.ename = ename;
this.job = job;
}
public Employee(int empno, String ename, String job, int cont) {
this(empno, ename, job); // 내부 다른 생성자 호출
this.cont=cont;
}
public Employee(int empno, String ename, String job, int cont, String salType) {
this(empno, ename, job, cont); // 내부 다른 생성자 호출
this.salType=salType;
}
}
and
- this( ) 는 같은 클래스의 멤버들 간에 서로 호출할 수 있는 것 처럼 생성자 간에도 서로 호출이 가능하다.
- 동일한 클래스 내의 서로 다른 생성자에서 오버로딩된 또 다른 생성자 하나를 호출하는대 사용됨
package ex7;
public class Chain {
Chain(){
this(10);
System.out.println("기본 생성자 Chain() 호출");
}
Chain(int x){
this(5,6);
System.out.println("일반 생성자 Chain(int x)호출");
System.out.println("x의 값 :"+ x);
}
Chain(int x, int y){
System.out.println("일반 생성자 Chain(int x, int y)호출");
System.out.println("x와 y값 : "+x+" "+y);
}
}
위 두 생성자를 사용하여 실행 시켜보자
- toString은 객체의 정보를 String(문자열)형으로 형변환 해준다
package ex7;
public class ExampleChain {
public static void main(String[] args) {
Employee e = new Employee(12341243, "홍길순", "매장직원", 2);
System.out.println("직원 명: "+ e.ename);
System.out.println("계약 여부: "+ e.cont);
Chain c = new Chain(7);
System.out.println(c.toString());
MemberChain m = new MemberChain();
System.out.println(m.toString());
}
}
😥
package ex7;
public class MemberChain {
String firstName;
String country;
int age;
public MemberChain() {
this("홍길순");
}
public MemberChain(String mName) {
this(mName, 20);
}
public MemberChain(String mName, int mAge) {
this(mName, mAge, "대한민국");
}
public MemberChain(String mName, int mAge, String mCountry) {
firstName = mName;
age = mAge;
country = mCountry;
}
void prinInfo() {
System.out.println("이름 : " + firstName);
System.out.println("국적 : " + country);
System.out.println("나이 : " + age);
}
}
※ 오버로딩(overloading)은 새로운 메소드를 정의하는 것입니다.
※ 하지만 오버라이딩(overriding)은 상속받은 기존의 메소드를 재정의하는 것입니다.
public String toString() {
//object 클래스의 toString()을 오버라이딩 했음.(확인 하기 편함)
return firstName +"::"+ country +"::"+ age;
위 생성자를 실행
package ex7;
public class Constructor04 {
public static void main(String[] args) {
MemberChain object = new MemberChain();
object.prinInfo();
}
}
- 제한자 종류
i) public : 모든 접근을 허용
ii) protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
iii) default : 같은 패키지(폴더)에 있는 객체들만 허용
iv) private : 현재 객체 내에서만 허용
package ex7;
public class Animal {
protected String name;
String h="안녕";
public String getName() {
return name;
}
public String getH() {
return h;
}
}
와
package ex7;
public class Use {
public static void main(String[] args) {
Animal a = new Animal();
a.name = "이쁜 동물";
System.out.println(a.getName());
a.h="헬로";
System.out.println(a.h);
System.out.println(a.getH());
}
}
상속관계는 아니지만 패키지가 같아서 가능하다.
package test;
import ex7.Animal;
public class Use {
public static void main(String[] args) {
Animal a = new Animal();
// a.name = "이쁜 동물"; <- 상속관계가 아니라 안됨
System.out.println(a.getName());
// a.h="헬로"; <- 다른 패키지라 안됨
// System.out.println(a.h); <- 다른 패키지라 안됨
System.out.println(a.getH());
}
}
하지만 이것은 패키지가 달라서 에러가 난다.😥
- public 접근 제한은 모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 합니다.
package ex7;
public class Dog {
public String breed;
public String color;
protected int age;
private String name;
public void bowwow() {
System.out.println("멍멍 짖다.");
sleep(); <- private일때 추가
}
protected void run() { <- protected일때 추가
System.out.println("달리다");
}
private void sleep() { <- private일때 추가
System.out.println("잠을자다");
}
public String getName() { <- private일때 추가
return name;
}
public void setName(String name) { <- private일때 추가
this.name=name;
}
}
호출하기
package ex7;
public class AccessModifier01 {
public static void main(String[] args) {
Dog dogObj = new Dog();
dogObj.breed = "포메라니언";
dogObj.color = "갈색";
System.out.println("강아지 품좀 : " + dogObj.breed);
System.out.println("강아지 색상 : " + dogObj.color);
dogObj.boewow();
}
}
- 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 합니다.
- 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자를 호출할 수 있습니다.
protected void run() {
System.out.println("달리다");
추가함
package ex7;
public class AccessModifier02 {
public static void main(String[] args) {
Dog obj = new Dog();
obj.breed = "포메라니언";
obj.color = "갈색";
System.out.println("강아지 품좀 : " + obj.breed);
System.out.println("강아지 색상 : " + obj.color);
obj.bowwow();
obj.age = 10;
System.out.println("강아지 나이 : " + obj.age);
obj.run();
}
}
dogObj -> obj 으로 변경하며, 나이 추가
- private 접근 제한은 동일한 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한합니다.
- 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있습니다.
내부에서는 사용이 가능하지만 외부에서 호출은 불가능하다
private String name;
public void bowwow() {
System.out.println("멍멍 짖다.");
sleep();
,
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
을 추가함
// obj.name = "다운"; private은 외부에서 사용 불가
obj.setName("다운");
System.out.println("강아지 이름 : " + obj.getName());
// obj.sleep(); private이므로 사용불가
이렇게 바꿔준다면 사용이 가능하다
- 상속은 다른 클래스 간의 관계를 설정하고 계층적 순서로 정보를 관리하며 코드를 재사용하는 데 도움이 된다.
- 새로운 클래스를 만들 때, 원하는 코드 중 일부가 포함된 클래스가 이미 있는 경우 기존 클래스에서 새 클래스를 파생(상속)시킬 수 있다.
- 이렇게 함으로써 기존 클래스의 멤버 변수와 메소드를 재사용할 수 있다.
- 부모 클래스 = 슈퍼 클래스, 기본 클래스
-다른 클래스에 멤버 요소(메서드와 변수)를 상속하는 클래스로 상위 클래스- 자식 클래스 = 서브 클래스, 파생 클래스
-다른 클래스의 멤버 요소를 상속받은 클래스로 하위 클래스
-자식 클래스는 부모 클래스의 모든 멤버 요소를 소유할 뿐만 아니라 그 밖에도 고유한 멤버 메소드와 변수를 추가할 수 있음
부모 클래스에서 자식 클래스로 상속하려면 extends
superclass를 하고자 하는 부모클래스 바꾸면 => 이미 부모클래스가 가지고 있는 것은 다 지게 된다.
parent
package ex8;
public class ParentCat {
public String breed = "샴고양이";
void eat() {
System.out.println("먹이를 먹다");
}
}
baby
package ex8;
public class BabyCat extends ParentCat {
public String color = "초콜릿색";
void meow() {
System.out.println("야옹하고 울다.");
}
}
출력
package ex8;
public class Example01 {
public static void main(String[] args) {
BabyCat bCat = new BabyCat();
System.out.println("품종 : " + bCat.breed); // 수퍼클래스의 멤버변수 사용
System.out.println("색상 : " + bCat.color);
bCat.eat(); // 수퍼클래스의 메소드 사용
bCat.meow();
}
}
package ex8;
public class Calculation {
int z;
public void addition(int x, int y) {
z = x + y;
System.out.println("두 수의 덧셈 : " + z);
}
public void subtraction(int x, int y) {
z = x - y;
System.out.println("두 수의 뺄셈 : " + z);
}
}
위 Calculation을 상속받아서 Inheritance를 만들었음.
package ex8;
public class Inheritance01 extends Calculation{
public void multiplication (int x, int y) {
z = x * y;
System.out.println("두 수의 곱셈 : " + z);
}
public static void main(String[] args) {
int a = 20, b = 10;
Inheritance01 obj = new Inheritance01();
obj.addition(a,b);
obj.subtraction(a,b);
obj.multiplication(a,b);
}
}
이러한 상속 관계를 is-A관계라고 부른다.
다형성 형성를 위해 상속을 만든다.
<link rel="stylesheet" href="css/common.css" type="text/css">
@charset "UTF-8";
*{margin: 0;
padding: 0;}
body{font-family: "맑은 고딕", "돋움";
font-size: 12px;
color: #444444;}
ul{list-style-type: none;}
.clear{clear: both;}
#wrap{width: 1000px;
margin: 0 auto;}
_____________________________________________________________________________
<link rel="stylesheet" href="css/header.css" type="text/css">
@charset "UTF-8";
header{height: 100px;
position: relative;}
header #logo{position: absolute;
top: 12px;
left: 20px;}
header #top_menu{position: absolute;
top: 10px;
left: 770px;}
header #main_menu{width: 800px;
height: 38px;
background-image: url("../images/main_menu_bg.png");
background-repeat: no-repeat;
position: absolute;
top: 40px;
left: 210px;}
header #main_menu li{display: inline-block;
margin: 12px 30px 0 50px;
font-size:13px;}
header #main_menu a:link{text-decoration: none;
color: #ffffff;}
header #main_menu a:hover{text-decoration: none;
color: #ffffff;}
header #main_menu a:visited{text-decoration: none;
color: #ffffff;}
header #main_menu a:active{text-decoration: none;
color: #ffffff;}
@charset "UTF-8";
header{height: 100px;
position: relative;}
header #logo{position: absolute;
top: 12px;
left: 20px;}
header #top_menu{position: absolute;
top: 10px;
left: 770px;}
header #main_menu{width: 800px;
height: 38px;
background-image: url("../images/main_menu_bg.png");
background-repeat: no-repeat;
position: absolute;
top: 40px;
left: 210px;}
header #main_menu li{display: inline-block;
margin: 12px 30px 0 50px;
font-size:13px;}
header #main_menu a:link{text-decoration: none;
color: #ffffff;}
header #main_menu a:hover{text-decoration: none;
color: #ffffff;}
header #main_menu a:visited{text-decoration: none;
color: #ffffff;}
header #main_menu a:active{text-decoration: none;
color: #ffffff;}
_____________________________________________________________________________
<link rel="stylesheet" href="css/main.css" type="text/css">
@charset "UTF-8";
/*왼쪽 콘텐츠*/
aside{
width:190px;
float:left;}
/*로그인*/
aside #login_box{
width: 186px;
height: 120px;
border: solid 1px #dddddd;
border-radius: 10px;
background-color: #f3f3f3;}
aside #login_title{
margin: 10px 0 0 20px;}
aside #login_input{
float: left;
margin: 10px 0 0 10px;}
aside #login_btn{
float: left;
margin: 12px 0 0 5px;}
aside #login_input input{
width: 100px;
height: 20px;
border: solid 1px #dddddd;}
aside #guestBook{
width: 189px;
height: 135px;
margin-top: 15px;
background-color: #eeeeee;
border: solid 1px #cccccc;
border-radius: 10px;
box-shadow: 2px 2px 5px #dddddd;}
aside #guestBook_title{
width: 165px;
padding: 10px 0 0 5px;
margin: 0 0 0 8px;
border-bottom: solid 1px #cccccc;}
aside #guestBook ul{
margin: 10px 0 0 40px;}
aside #guestBook li{
margin-top: 5px;
list-style-image: url("../images/icon_blue.gif");}
/* 오른쪽 메인*/
section#main{
width: 758px;
float: right;}
/*border: solid 1px #ff0000; */
/* 공지사항, 자유 게시판, YOUTUBE를 포함하는 박스 */
section#main #notice_free_youtube{
height: 250px;
position: relative;
margin-top: 10px;}
section#main #notice{
width: 300px;
position: absolute;}
/*최근 게시물 이미지와 목록*/
section#main .latest_title{
padding-bottom: 3px;
border-bottom: solid 1px #cccccc;}
section#main .latest_title img.latest_img{
float: left;}
section#main .latest_title img.more{
float: right;}
section#main .latest_title li{
padding: 10px 0 10px 0;}
section#main .latest_content .list div{
float: right;}
section#main .latest_content .list .subject{
width: 170px;}
section#main .latest_content .list .date{
float: right;
margin-right: 10px;}
/*자유 게시판 박스*/
section#main #free{
margin-top: 70px;
width: 300px;
position: absolute;
top: 120px;}
/* border:solid 1px #0000*/
section#main #youtube{
width: 365px;
height: 250px;
position: absolute;
left: 380px;}
/* border:solid 1px #0000*/
section#main #youtube_img{
margin: 10px 0 0 45px;}
_____________________________________________________________________________
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>클래식 기타 커뮤니티</title>
<link rel="stylesheet" href="css/common.css" type="text/css">
<link rel="stylesheet" href="css/header.css" type="text/css">
<link rel="stylesheet" href="css/main.css" type="text/css">
</head>
<body>
<div id="wrap">
<header>
<a href="index.jsp"><img id="logo" alt="로고" src="images/logo.png"></a>
<nav id="top_menu">
HOME | LOGIN | JOIN | NOTICE
</nav>
<nav id="main_menu">
<ul>
<li><a href="free/BoardList.jsp">자유게시판</a></li>
<li><a>기타연주</a></li>
<li><a>공동구매</a></li>
<li><a>연주회 안내</a></li>
<li><a>회원 게시판</a></li>
</ul>
</nav>
</header>
<aside>
<article id="login_box">
<img id="login_title" alt="" src="images/ttl_login.png">
<div id="input_button">
<ul id="login_input">
<li><input type="text"></li>
<li><input type="password"></li>
</ul>
<img id="login_button" alt="" src="images/btn_login.gif">
</div>
<div class="clear"></div>
<div id="join_search">
<img src="images/btn_join.gif">
<img src="images/btn_search.gif">
</div>
</article>
<article id="guestBook">
<div id="guestBook_title">
<img alt="" src="images/ttl_memo.gif">
</div>
<ul>
<li>안녕하세요!</li>
<li>안녕하세요!</li>
<li>안녕하세요!</li>
<li>안녕하세요!</li>
</ul>
</article>
</aside>
<section id="main">
<img alt="" src="images/main_img.png">
<section id="notice_free_youtube">
<article id="notice"> <!-- 공지사항 -->
<div class="latest_title">
<img class="latest_img" src="images/latest1.gif">
<img class="more" src="images/more.gif">
<div class="clear"></div>
</div>
<div class="latest_content">
<img class="image" src="images/book_pen.gif">
<ul class="list">
<li>
<div class="subject">루바토 개편과 사이트 이용...</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">루바토 개편과 사이트 이용...</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">루바토 개편과 사이트 이용...</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">루바토 개편과 사이트 이용...</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
</ul>
</div>
</article><!-- 공지사항 -->
<article id="free"> <!-- 자유게시판 -->
<div class="latest_title">
<img class="latest_img" src="images/latest2.gif">
<img class="more" src="images/more.gif">
<div class="clear"></div>
</div>
<div class="latest_content">
<img class="images" src="images/book_pen.gif">
<ul class="list">
<li>
<div class="subject">까스통님의 선물인 보드카....</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">까스통님의 선물인 보드카....</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">까스통님의 선물인 보드카....</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
<li>
<div class="subject">까스통님의 선물인 보드카....</div>
<div class="date">2023-06-22</div>
<div class="clear"></div>
</li>
</ul>
</div>
</article><!-- 자유게시판 -->
<article id="youtube"> <!-- 유튜브 동영상 -->
<div class="latest_title">
<img class="latest_img" src="images/latest3.gif">
<img class="more" src="images/more.gif">
<div class="clear"></div>
</div>
<img id="youtube_img" src="images/bach.jpg">
</article id="youtube"><!-- 유튜브 동영상 -->
</section>
</section><!-- main section -->
</div>
</body>
</html>