/*
클래스
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 |