상속
한 페이지에 여러 클래스 구성 가능
하지만 public 속성을 갖는 클래스는 1개여야 한다.(파일명과 동일한 클래스에 public속성 부여)
상속에 사용하는 키워드 extends
/*Human으로 부터 물려받은 showInfo()를 오버라이드(재정의) 해보자
* Overriding (메소드 재정의)
* [규칙]
* 1) 메소드 이름은 부모의 것과 동일하게 구성
* 2) 메소드의 매개변수의 자료형과 갯수, 순서 모두 부모와 동일하게 구성
* 3) 반환타입도 같아야 함
* 4) 단 메소드 body(몸체-내용) 부분은 다르게 구성한다.*/
super=> 부모로부터 물려받은 변수, 메소드를 참조하는 키워드
superman의 name은 상속받은 것이기 때문에 this나 super나 똑같다.
하지만 showinfo의 경우 super.showInfo()는 다른 것을 알 수 있다.
Overriding한 메소드를 오버로드 할 수 있다.
package day13;
// 한 페이지에 여러 클래스 구성 가능
// 하지만 public 속성을 갖는 클래스는 1개여야 한다.(파일명과 동일한 클래스에 public속성 부여)
// 상속에 사용하는 키워드 extends
class Superman extends Human{
int power;
public Superman(String name, int h, int p) {
this.name=name;
height = h;
power =p;
}
/*Human으로 부터 물려받은 showInfo()를 오버라이드(재정의) 해보자
* Overriding (메소드 재정의)
* [규칙]
* 1) 메소드 이름은 부모의 것과 동일하게 구성
* 2) 메소드의 매개변수의 자료형과 객수, 순서 모두 부모와 동일하게 구성
* 3) 반환타입도 같아야 함
* 4) 단 메소드 body(몸체-내용) 부분은 다르게 구성한다.*/
public String showInfo() {
String info = "==슈퍼맨 정보==\n";
info+=super.showInfo();
// info+="이름: "+name+"\n";
// info+="키: "+height+"\n";
info+="초능력: "+power+"\n";
return info;
}
// 오버라이딩한 메소드를 오버로드 해보자
public String showInfo(String title) {
String info = title+"\n";
info+=this.showInfo();
// info+=super.showInfo();
// info+="초능력 : "+power;
return info;
}
public String showInfo(int Power) {
String info = this.showInfo();
info+="엄청난 초능력: "+Power;
return info;
}
}
class Aquaman extends Human{
double speed;
public Aquaman(String name, int height, double speed) {
this.name=name;
this.height=height;
this.speed=speed;
}
public String showInfo() {
String info="==아쿠아맨 정보==";
info+="속도는 : "+speed;
info+="키는 : "+height;
return info;
}
}
public class Human {
String name;
int height;
public Human() {
name="인간";
height = 100;
}
public Human(String name, int height) {
this.name = name;
this.height = height;
}
public String showInfo() {
return "이름"+name+"\t키:"+height;
}
}
부모와 자식의 상속관계를 맺을 경우 부모타입의 변수를 선언하고 자식의 객체를 생성이 가능하다.
부모타입으로 선언했다는 것은 부모가 물려주는 것에만 접근 가능하다.
다형성
부모와 자식의 상속관계를 맺을 경우 부모타입의 변수를 선언하고 자식의 객체를 생성한다.
=> 이때 참조변수로 접근할 수 있는 범위는 제한이 있다. 부모로 부터 물려받은 변수나 메소드는 접근 가능
그러나 자식이 가지고 있는 고유한 변수나 메소드는 접근 불가
단 예외가 있는데 오버라이드한 메소드가 있을 때는 오버라이드한 메소드를 우선 적용한다.
==> spring에서 이러한 방식을 사용하는데 객체간에 연결을 느슨하게해서 재사용성을 높이기 위해서이다.
형변환의 일회적 사용방법
부모 자식의 상속관계일 경우 형변환이 가능함
((Superman)(hs)).showInfo("타이틀",100);
. 이 우선 순위가 더 높기 때문에 소괄호로 먼저 묶어주어야 한다.
AWT상속을 이용하여 GUI 구성해보기
//awt: abstract window toolkit과 관련된 패키지로 GUI를 구성할 수 있는 클래스들이 모여있음
Frame, Panel 컨테이너 클래스
Button, TextField, Label, TextArea 컴포넌트 클래스
package day13;
//GUI => Graphic User Interface
//CLI => Command Line Interface
import java.awt.*;
/*awt: abstract window toolkit과 관련된 패키지로 GUI를 구성할 수 있는
클래스들이 모여있음
1.Frame 클래스를 상속
2.MyGui 기본생성자 만들기
3.main()안에서 MyGui 객체를 생성
java.awt.Frame 클래스 : 컨테이너 클래스
Panel 클래스 : 컨테이너
Button, TextField, Label, TextArea: 컴포넌트(Component)
*/
public class MyGui extends Frame
{
Panel p1;
Button b1,b2,b3;
TextField tf1, tf2, tf3;
Label lb1,lb2,lb3;
TextArea t1,t2,t3;
public MyGui(){
p1=new Panel();// p1을 Frame에 붙여보자.
this.add(p1);
p1.setBackground(Color.yellow);
b1=new Button();
b2=new Button("Login");
b3=new Button("Join");
//컴포넌트들은 컨테이너에 부착해야 함
p1.add(b1);
p1.add(b2);
p1.add(b3);
//버튼의 배경
b1.setBackground(Color.cyan);
b2.setBackground(Color.green);
b3.setBackground(Color.magenta);
//버튼의 글자색
b2.setForeground(Color.blue);
b3.setForeground(Color.white);
tf3 = new TextField("3", 30);
tf2 = new TextField("2", 30);
tf1 = new TextField("1", 30);
p1.add(tf3);
p1.add(tf2);
p1.add(tf1);
//Label(String text, int alignment) 생성자
lb1 = new Label("이름",Label.LEFT); //기본이 왼쪽 정렬
lb2 = new Label("아이디 ",Label.RIGHT);
lb3 = new Label("비밀번호",Label.CENTER);
lb1.setBackground(Color.darkGray);
p1.add(lb1);
p1.add(lb2);
p1.add(lb3);
//TextArea(int rows, int columns) : 행, 열
t1 = new TextArea(3,5);
//TextArea(String text, int rows, int columns)
t2 = new TextArea("홍길동",4,5);
//TextArea(String text, int rows, int columns, int scrollbars)
t3 = new TextArea("김길덕",6,6,TextArea.SCROLLBARS_VERTICAL_ONLY);
p1.add(t1);
p1.add(t2);
p1.add(t3);
}
public static void main(String[] args) {
MyGui mg = new MyGui();
mg.setSize(500,500);//Frame의 사이즈(폭, 넓이) 지정
mg.setVisible(true);//Frame을 보여주게끔 true값을 준다.
}
}
java api에 들어가서 awt에 TextField를 들어가면 생성자와 method에 대한 내용이 있으므로 읽은 후 사용하면 된다.
설명을 봐서 모르겠으면 field summary를 가서 확인한다.
예제)
package day13;
public class School {
public static void main(String[] args) {
Person ps = new Person("홍길동",3);
ps.showinfo();
System.out.println();
Student st = new Student("김길동",2,"자바반");
st.showInfo();
System.out.println();
//오버라이드
st.showInfo(3);
System.out.println();
Teacher tc = new Teacher("백동길",4,"네트워크");
tc.showInfo();
System.out.println();
tc.showInfo("슈퍼");
Student s1 = new Student("김기휘",1,"자바반");
Student s2 = new Student("이한빈",2,"네트워크");
Student s3 = new Student("김재호",3,"빅데이터");
Student a[] = new Student[3];
a[0]=s1;
a[1]=s2;
a[2]=s3;
System.out.println();
System.out.println("여기서부터 학생 반복문");
for(Student s: a) {
s.showInfo();
}
Teacher t1 = new Teacher("이임순",100,"자바쌤");
Teacher t2 = new Teacher("양기경",200,"네트워크쌤");
Teacher []b = new Teacher[2];
b[0]=t1;
b[1]=t2;
System.out.println();
System.out.println("여기서부터 선생님 반복문");
for(int i=0;i<b.length;i++) {
b[i].showInfo();
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package day13;
public class Person {
private String name;
private int no;
public Person() {
}
public Person(String name, int no) {
this.name=name;
this.no=no;
}
public Person(String name) {
this.name=name;
this.no=9999;
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void setNo(int no) {
this.no=no;
}
public int getNo() {
return no;
}
public void showinfo() {
System.out.println("이름: "+name+" 번호: "+no);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package day13;
public class Student extends Person{
private String cname;
public Student() {
}
public Student(String name, int no, String cname) {
super.setName(name);
super.setNo(no);
this.cname=cname;
}
public Student(String cname) {
this.cname=cname;
}
public void setCname(String cname) {
this.cname=cname;
}
public String getCname() {
return cname;
}
public void showInfo() {
super.showinfo();
System.out.println("학급: "+cname);
}
public int showInfo(int a) {
this.showInfo();
System.out.println("추가로 "+a+"실행");
return a;
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
package day13;
public class Teacher extends Person{
private String subject;
public Teacher() {
}
public Teacher(String name,int no, String subject) {
super.setName(name);
super.setNo(no);
this.subject=subject;
}
public void setSubject(String subject) {
this.subject=subject;
}
public String getSubject() {
return subject;
}
public void showInfo() {
super.showinfo();
System.out.println("과목: "+subject);
}
public String showInfo(String a) {
this.showInfo();
String ss =a;
System.out.println(ss+" 선생님!");
return ss;
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SQL
--데이터 수정하기
update 테이블명 set 컬럼명=수정할값 , 컬럼명='수정할 값'
where 조건절;
--데이터 삭제
delete from 테이블명
where 조건절;
--테이블 삭제
drop table 테이블명;
즉각적으로 영향을 미침(DDL문)
1. DDL문장(Data Definition Language)
CREATE TABLE .... 테이블 생성
DROP TABLE ...., 테이블 삭제
ALTER TABLE ...... 테이블 변경
2. DML문장(Data Manipulation Language)
데이터를 조작하는 문장
INSERT, UPDATE, DELETE 문장
==> DML문장은 commit을 하던지 rollback이 가능함
3. DQL문장(Data Query Language)
데이터를 조회하는 문장
SELECT 문
select * from student;
insert into student
values(5,'구미지','지리');
commit;
--수학반 학생 정보만 출력하기
select * from student
where cname='수학';
--데이터 수정하기
/*
update 테이블명 set 컬럼명=수정할값
where 조건절*/
update student set cname='기하와벡터', no=2
where name='이임순';
commit;
delete from student
where name='황득우';
commit;
drop table student;
Database의 특징 - 파일구조 시스템과의 차이점
- 데이터의 중복성의 제거
- 데이터의 무결성을 지켜준다.
- 데이터의 정확성과 일관성
- 불일치를 피할 수 있다.
- 표준화가 가능하다
- 데이터의 공유가 가능
Entity - 관리대상, Attribute - 관리대상의 구체적 내용, Identified - Entity를 대표하는 Att, Tuple - 여러 개의 Att집합
Relation - Entitiy와 Entitiy의 관계
유일성을 보장하는 컬럼은 반드시 존재해야한다. (Primary Key) 학번이 될 수 있다.
PRIMARY KEY는 UNIQUE 하고 NOT NULL 이어야 한다.
--학생 테이블 생성
CREATE TABLE STUDENT(
NO number(4) primary key,
NAME varchar2(30) not null,
ADDR varchar2(200),
TEL varchar2(15) not null,
Indate date default sysdate,
cname varchar2(50),
Room number(3)
);
insert into student
values(1,'이임순','서울시 영등포구','0102222',sysdate,'자바반',201);
commit;
select * from student;
'개발자 > 국비지원 SW' 카테고리의 다른 글
국비지원 15일차 - 패키지, 접근 지정자, 패키징, BorderLayout, GridLayout, Panel상속, SQL, NULL은 0 (0) | 2020.05.04 |
---|---|
국비지원 14일차 - @Override, instanceof, GUI실습2, Layout, Foreign Key (0) | 2020.04.29 |
국비지원 12일차 - 다형성(오버로딩), 생성자, this(), OracleSQL, SQLDeveloper (0) | 2020.04.27 |
국비지원 11일차 - 캡슐화, UML, 명렬줄 인수, 시맨틱 태그 (0) | 2020.04.24 |
국비지원 10일차 - 참조유형의 배열, for each문, OOP, 추상화 (0) | 2020.04.23 |