본문 바로가기

일/JAVA

java05.class.class

 

/*

클래스

1. 클래스의 명명규칙

1) 하나 이상의 문자로 이루어져야 한다. 단, 첫글자는 대문자로 시작해야 하고

한글이름도 가능하지만 관례적으로 영문이름으로 정의한다.

2) 첫 번째는 숫자가 올 수 없다.

3) $, _ 이외의 특수문자는 사용할 수 없다.

4) Java예약어(for, if...)는 사용할 수 없다.

 

2. 클래스를 선언하는 키워드 class는 반드시 소문자로 작성해야 한다.

3. 일반적으로 소스파일 하나당 한개의 클래스를 정의한다. 하지만 여러개의 클래스도

선언이 가능하다. 다만 클래스당 한 개의 ~.class파일 각각 생성된다.

다만, public(접근제한자)은 소스파일명과 동일한 클래스에만 선언할 수 있다.

4. 소스파일명과 class명은 동일해야 한다.

*/

public class Human {

// 1. 속성

String name;

String gender;

int age;

String ssn;

 

// 2. 생성자 : class 이름과 동일

Human(){} // 기본생성자

Human(String name){}

 

// 3. 메서드

void think(){System.out.println("생각을 한다");}

void eat(){System.out.println("음식을 먹는다");}

void speak(){System.out.println("말을 한다");}

void move(){System.out.println("움직인다");}

}

public class HumanMain {

public static void main(String[] args) {

 

//클래스(필드, 생성자, 메서드로 구성)

String str1 = new String(); // 기본생성자 : ()가 비었다. 데이터타입 변수 = 객체생성연산자 생성자();

String str2 = new String("소향"); // 매개변수가 있는 생성자

System.out.println(str2.toString());

Human kim = new Human();

Human park = new Human("박씨");

 

Human adam = new Human();

System.out.println(adam);

System.out.println(adam.toString());

System.out.println();

 

adam.name = "아담";

adam.gender = "남자";

adam.age = 10000;

adam.ssn = "991118-1234567";

 

System.out.println("아담의 이름= "+adam.name);

System.out.println("아담의 성별= "+adam.gender);

System.out.println("아담의 나이= "+adam.age);

System.out.println("아담의 주민= "+adam.ssn);

System.out.println();

 

Human eve = new Human("이브");

eve.name = "이브";

eve.gender = "여자";

eve.age = 9000;

eve.ssn = "991111-2234567";

System.out.println("이브의 이름= " +eve.name);

System.out.println("이브의 성별= "+eve.gender);

System.out.println("이브의 나이= "+eve.age);

System.out.println("이브의 주민= "+eve.ssn);

System.out.println();

 

adam.think();

adam.eat();

adam.speak();

adam.move();

System.out.println();

 

eve.think();

eve.eat();

eve.speak();

eve.move();

System.out.println();

}

}

public class Human {

// 1. 속성(필드)

String nation = "대한민국";

String name;

String gender;

int age;

 

// 2. 생성자

// 생성자오버로딩 - 다형성

public Human(){}

public Human(String xxx){

this.name = xxx;

}

public Human(String name, String gender){}

public Human(String name, String gender, int age){

this.name = name;

this.gender = gender;

this.age = age;

}

public Human(String name, int age, String gender){}

 

// 3. 메서드

// Object로부터 상속받은 메서드를 재정의

// 메서드 오버라이딩

// public String toString(){

// return this.name+","+this.gender+","+this.age;

// }

//@애너테이션, 메타정보, 컴파일시 toString() 부모메서드를 재정의여부를 확인

//@Overide

@Override //

public String toString() {

return "Human [nation=" + nation + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";

}

}

public class HumanMain {

public static void main(String[] args) {

// 생성자

Human h1 = new Human();

h1.name = "소향";

h1.gender = "여자";

h1.age = 44;

System.out.println(h1.name+","+h1.gender+","+h1.age);

System.out.println();

 

Human h2 = new Human("거미");

// h2.name = "거미";

h2.gender = "여자";

h2.age = 45;

 

System.out.println(h2.name+","+h2.gender+","+h2.age);

System.out.println();

 

Human h3 = new Human("나얼","남자",50);

System.out.println(h3.name+","+h3.gender+","+h3.age);

System.out.println("==============================");

 

// toString() 객체 자신의 정보를 문자열로 리턴하는 메서드

System.out.println(h1.toString());

System.out.println(h2.toString());

System.out.println(h3.toString());

}

}

public class Human {

// 1. 필드

String name;

 

// 2. 생성자

public Human() {

// super(); //new Object()와 동일

}

public Human(String name) {

// super(); // this 객체자기자신, super 부모. 부모는 생략가능

this.name = name;

}

 

// 3. 메서드

// 문법 : void는 return되는 값이 없을 때

// 데이터타입 : return 데이터타입과 동일한

// 메서드오버로딩

void speak() { System.out.println("말!");

}

public void speak(String lang) {

System.out.println(lang+"로 말을 합니다");

}public void speak(int age, String lang) {

System.out.println("나는 "+age+"살이고 "+lang+"로 말을 합니다");

}public void speak(String lang, int age) {

System.out.println("나는 "+lang+"로 말을하고 "+age+"살입니다");

}

}

public class HumanMain {

 

public static void main(String[] args) {

// 메서드오버로딩

Human kor = new Human("손흥민");

kor.speak();

 

Human usa = new Human("미국놈");

usa.speak("영어");

 

Human chn = new Human("중국놈");

usa.speak("광동어");

 

kor.speak("한국어");

 

kor.speak(30,"영어");

usa.speak(25, "한국어");

kor.speak("일본어", 33);

}

 

}

// 추상클래스를 상속받을 경우 추상메서드는 반드시 구현해야 한다.

 

public class American extends Human{

 

@Override

void speak() {

System.out.println("영어");

}

 

@Override

public String toString() {

return "American [nation=" + nation + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";

}

 

@Override

void move() {

System.out.println("햄버거제조");

}

 

}

// 추상클래스를 상속받을 경우 추상메서드는 반드시 구현해야 한다.

public class American extends Human{

@Override

void speak() {

System.out.println("영어");

}

 

@Override

public String toString() {

return "American [nation=" + nation + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";

}

 

@Override

void move() {

System.out.println("햄버거제조");

}

}

// 추상클래스 -객체를 생성할 수 없는 클래스

public abstract class Human {

String nation;

String name;

String gender;

int age;

 

// 추상메서드 - 실행블럭이 없는 메서드

abstract void speak();

abstract void move();

void think() {

System.out.println("생각");

}

 

}

public class HumanMain {

public static void main(String[] args) {

// 추상화 - 추상클래스는 인스턴스화 할 수 없다.

// Human human = new Human();

Korean kor = new Korean();

kor.nation = "대한민국";

kor.name = "손흥민";

kor.gender = "남자";

kor.age = 31;

kor.speak();

kor.move();

kor.think();

System.out.println(kor.toString());

 

 

System.out.println();

American usa = new American();

usa.nation = "미국";

usa.name = "에스더";

usa.gender = "여자";

usa.age = 32;

usa.speak();

usa.move();

usa.think();

System.out.println(usa.toString());

 

}

}

public class Korean extends Human{

@Override

void speak() {

System.out.println("한국어");

}

 

@Override

void move() {

System.out.println("김치제조");

}

}

 

인터페이스 수업 내용

public class American implements Human{

 

@Override

public void speak(String lang) {

System.out.println(lang+"로 말을 합니다");

}

 

@Override

public void move() {

System.out.println("버거제조");

}

 

@Override

public void think() {

System.out.println("철학을 논합니다");

}

 

}

// 인터페이스 - 모든 메서드가 추상메서드로 구성

public interface Human {

 

//인터페이스에서 선언된 필드(속성)는 상수로 정의해야 한다.

//상수는 초기화가 되어야 한다. 그렇지 않으면 에러

//상수는 대문자로 선언하는 것이 관례

//final은 생략

String NATION = "";

final String name = "";

String NAME = "";

String GENDER = "";

int AGE = 0;

 

//인터페이스의 메서드는 전부 추상메서드이다.

//abstract 생략, 기본값

void speak(String lang);

void move();

void think();

}

public class HumanMain {

 

public static void main(String[] args) {

// interface(인터페이스) - 인스턴스화 불가

// 하지만, 익명구현객체로는 선언이 가능하다.

// Human human = new Human();

Korean kor = new Korean();

// 인터페이스에서 필드는 무조건 상수이다.

// kor.NATION = "대한민국";

kor.speak("한국어");

kor.move();

kor.think();

System.out.println();

 

American usa = new American();

usa.speak("영어");

usa.move();

usa.think();

System.out.println();

}

 

}

//인터페이스는 상속이라 하지 않고 구현한다는 의미로 implements를 사용

public class Korean implements Human {

 

@Override

public void speak(String lang) {

System.out.println(lang+"로 말을 합니다");

}

 

@Override

public void move() {

System.out.println("김치제조");

}

 

@Override

public void think() {

System.out.println("사단칠정론을 논합니다");

 

}

 

}

' > JAVA' 카테고리의 다른 글

java05.class.method  (2) 2023.05.24
java05.class.member  (0) 2023.05.24
java04. ref_type  (0) 2023.05.24
java03. if_for  (0) 2023.05.24
java02. operators  (0) 2023.05.23