전날 복습
스태틱(static)
-변수와 메소드에 쓸 수 있다.
static int a, public static void main()
-공용 변수 및 메소드를 사용하기 위해 선언.
-클래스명.변수, 클래스명.메소드 - > Math.random();
메소드 오버로딩(method overloading)
-System.out.println();
-메소드명은 중복 불가한데, 매개변수의 개수나 매개변수의 자료형이 다르다면
메소드명을 중복으로 선언가능
ex) 안되는 경우 가능한 경우
public void aaa(){] public void aaa(){]
public void aaa(){} public void aaa(int a){}
상속(inheritance)
-클래스를 선언할 때 다른 클래스를 상속 받으면 상속 받은
클래스의 변수와 메소드를 내꺼처럼 사용할 수 있다.
-상속 선언 방법
public class A extends B{}
- 문법적으로는 다중상속이 불가.
다만 상위클래스A, 하위클래스B(C클래스의 상위클래스), 하위클래스C 이런식으로는 가능하다.
- 상속 관계에 있는 클래스(자식, 서브, 하위)는 생성자 호출 유의!!
- 자식 클래스의 생성자 가장 첫줄에는 super();키둬드가 숨어 있다!
super(); -> 상위클래스의 기본 생성자 호출
==========================================================================================
상속 이어서
상속에 대한 문법 설명 1)
//상속 가능 여부는 : IS-A 관계가 충족.!
//ex> student is a person.
public class Phone { //모바일폰
int phoneNumber;
//문자를 전송하는 기능을 가진 메소드
public void sendMsg(){
System.out.println("문자 전송");
}
}
class SmartPhone extends Phone{
String os;
public void playApp(){
System.out.println("앱 실행~");
}
}
public class PhoneTest {
public static void main(String[] args) {
Phone p1 = new Phone();
SmartPhone p2 = new SmartPhone();
//----------------------------------
//다형성
//부모클래스형으로 자식클래스 객체 생성 가능
//부모클래스의 변수와 메소드만 사용 가능.
Phone p3 = new SmartPhone();
p3.sendMsg();
//오류!!
//SmartPhone p4 = new Phone();
}
}
상속에 대한 예제)
ComFriend, UniFriend, HobbyFriend의 상위클래스 Friend
public class Friend {
private String name;
private String tell;
public Friend(String name, String tell){
this.name = name;
this.tell = tell;
}
public void showInfo(){
System.out.println("이름 : " + name);
System.out.println("연락처 : " + tell);
}
}
Friend클래스의 하위 클래스 ComFriend
public class ComFriend extends Friend{
private String department;
public ComFriend(String name, String tell, String department){
//super()안에 매개변수 name과 tell을 넣어서 friend 생성자에 대입
super(name, tell);
this.department = department;
}
//상위클래스 Friend의 showInfo에 오버라이딩
public void showInfo(){
//상위클래스 Friend의 showInfo호출
super.showInfo();
System.out.println("부서 : " + department);
}
}
Friend클래스의 하위 클래스 UniFriend
public class UniFriend extends Friend{
private String major;
public UniFriend(String name, String tell, String major){
//super()안에 매개변수 name과 tell을 넣어서 friend클래스 생성자에 대입
super(name, tell);
this.major = major;
}
//상위클래스 Friend의 showInfo에 오버라이딩
public void showInfo(){
//상위클래스 Friend의 showInfo호출
super.showInfo();
System.out.println("전공 : " + major);
}
}
Friend클래스의 하위 클래스 HobbyFriend
public class HobbyFriend extends Friend {
private String hobby;
public HobbyFriend(String name, String tell, String hobby){
//super()안에 매개변수 name과 tell을 넣어서 Friend클래스 생성자에 대입
super(name, tell);
this.hobby = hobby;
}
//상위클래스 Friend의 showInfo에 오버라이딩
public void showInfo(){
//상위클래스 Friend의 showInfo호출
super.showInfo();
System.out.println("취미 : " + hobby);
}
}
인맥관리 기능을 활용하고 입력받는 클래스
//인맥관리 프로그램. 최대10명 저장가능.
//대학친구 UniFriend : 이름, 전공, 연락처
//직장동료 CompFriend : 이름, 부서, 연락처
public class Manager {
public static void main(String[] args) {
//대학친구 5명이 들어갈 공간 생성
UniFriend[] ufs = new UniFriend[5];
//직장친구 5명이 들어갈 공간 생성
ComFriend[] cfs = new ComFriend[5];
//동호회친구 5명이 들어갈 공간 생성
HobbyFriend[] hfs = new HobbyFriend[5];
//대학 친구 정보 등록
int uniIndex = 0;
//복습 ++이 뒤에 붙어있으면 한줄실행을 한 후 1증가 시킨다.
ufs[uniIndex++] = new UniFriend("홍길동","010","경영");
ufs[uniIndex++] = new UniFriend("김길동","010","컴공");
//회사 동료 등록
int compIndex = 0;
cfs[compIndex++] = new ComFriend("김대리","011","영업부");
cfs[compIndex++] = new ComFriend("이과장","010","인사부");
//동호회 친구 등록
int hobbyIndex = 0;
hfs[hobbyIndex++] = new HobbyFriend("김대리","011","영업부");
hfs[hobbyIndex++] = new HobbyFriend("이과장","010","인사부");
//대학 친구 정보 출력
for(int i = 0; i<uniIndex; i++){
ufs[i].showInfo();
}
System.out.println();
//직장 동료 정보 출력
for(int i = 0; i<compIndex; i++){
cfs[i].showInfo();
}
System.out.println();
//동호회 친구 정보 출력
for(int i = 0; i<hobbyIndex; i++){
hfs[i].showInfo();
}
}
}
인맥관리 기능을 활용하고 입력받는 클래스 기능 향상
public class ManagerUpgrade {
public static void main(String[] args) {
Friend[] fs = new Friend[10];
int index = 0;
fs[index++] = new UniFriend("김","0","과");
fs[index++] = new UniFriend("이","0","과");
fs[index++] = new ComFriend("이","0","과");
fs[index++] = new ComFriend("이","0","과");
fs[index++] = new HobbyFriend("이","0","과");
for(int i = 0; i<index; i++){
fs[i].showInfo();
}
}
}
==========================================================================================
Object클래스
모든 클래스는 Object 클래스를 상속하고 있다!
다른 클래스를 상속받고 있더라도 Object 클래스는 계속 상속하고 있다.
toString클래스
객체의 정보를 문자열로 표현하는 기능
ex)
클래스 니가 만들었잖아?
그러니까 클래스에 정보를 출력하는 메소드로
내가 toString() 메소드는 제공해주니까
니가 알아서 toString() 메소드를 오바리이딩해서
정보를 문자열로 원하는대로 표현해봐.
객체가 가지고 있는 변수들의 값을 문자열로 표현.
object클래스와 toString클래스를 이용한 예제)
public class Object1 {
private String name;
private int age;
public void aaa(){
System.out.println("메소드 실행");
//toString();//문자열로 표현.
//equals();//같은지 비교.
}
}
public class ObjectTest1 {
public static void main(String[] args) {
Object1 o1 = new Object1();
o1.aaa();
String result1 = o1.toString();
System.out.println(result1);
}
}
public class ObjectTest2 {
public static void main(String[] args) {
ToStringTest t1 = new ToStringTest();
String result1 = t1.toString();
System.out.println(result1);
//위 두줄 코드랑 똑같은 코드
System.out.println(t1.toString());
//위의 코드랑 같은 코드
//객체명을 출력하면 자동으로
//객체명 뒤에 . toString()이 붙어서 실행
System.out.println(t1);
}
}
public class ToStringTest {
private String name;
private int age;
private String addr;
private String tell;
private String email;
public void showInfo(){
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
System.out.println("주소 : " + addr);
System.out.println("연락처 : " + tell);
System.out.println("메일 : " + email);
}
@Override
public String toString() {
return "ToStringTest{" +
"name='" + name + '\'' +
", age=" + age +
", addr='" + addr + '\'' +
", tell='" + tell + '\'' +
", email='" + email + '\'' +
'}';
}
}
equals
String 클래스 객체의 equals() 메소드
String 클래스의 equals() 메소드는
String 클래스가 별도로 만든 메소드가 아니라
Object 클래스에서 선언된 equals() 메소드를
오버라이딩하여 문자열을 비교할 수 있도록 기능을 재정의 한 것.
@(anotation)
개발자의 실수를 미연에 방지해주는 기능 같은 것.
ex)
@A : A에 해당하는 문법이 맞는지 검사
public class Parent {
public void aaa(int a){
System.out.println("");
}
}
class Child extends Parent{
//@ -> anotation 어노테이션
//어노테이션 : 개발자의 실수를 미연에 방지해주는 기능
@Override //오류 Parent클래스의 메소드 aaa에 오버라이딩이 맞지 않기때문에
public void aaa() {
System.out.println("A");
}
}
'코딩 > JAVA' 카테고리의 다른 글
23.02.03 예외처리, 래퍼클래스, 컬렉션프레임워크 (0) | 2023.02.06 |
---|---|
23.02.02 String, interface (2) | 2023.02.02 |
23.01.31 (method overloading, static, 상속) (0) | 2023.01.31 |
23.01.30 (class, 접근제한자) (0) | 2023.01.30 |
23.01.27 (method, class) (0) | 2023.01.29 |
댓글