Language/Java 184

toString 의 사용법 / 매개변수의 다형성

class Product{ int price; // 제품의 가격 int bounsPoint; // 제품구매시 제공하는 보너스점수 Product(int price) { this.price = price; bounsPoint =(int)(price/10.0); //보너스 점수는 가격의 10% } } class Tv1 extends Product { Tv1 () { // 조상클래스의 생성자 Product(int price){}를 호출 super(100); } public String toString () { // overriding return "Tv"; // toString 은 객체정보를 뽑아내는것. } // return 값으로 "Tv"를 출력 } class Computer extends Product { ..

Language/Java 2021.03.26

참조변수의 형변환 예제와 instanceof 연산자

자손클래스로의 형 변환 방법 : fe2 = (FireEngine)car; public class Ex7_7 { public static void main(String[] args) { Car car = null; FireEngine fe = new FireEngine(); FireEngine fe2 = null; fe.water(); car = fe; // 조상 타입으로의 형변환 형변환은 생략되었다. //묵시적 형변환 //car.water(); // 에러이유 : car에는 water기능이 없다. 자손에게만 있음 fe2 = (FireEngine)car;// 자손타입으로의 형변환은 생략이 불가능. //명시적 형변환 // 원래 안되는건데 프로그래머 니가 책임져라, 나 : 닥치고 실행이나 시켜. 라고 한 것. ..

Language/Java 2021.03.26

참조변수의 향상된 기법

코드 25~26처럼 일일이 만들 필요없이 코드 40~42 처럼 객체를 { } 안에 넣기만하면 원하는 만큼 출력된다. new 필수 객체생성에. Instrument[] aInstrument = { }; 참조변수로 자손의 인스턴스 변수를 참조하는 것. class Instrument { void play() { System.out.println("연주하다"); } } class Flute extends Instrument { void play() { //method overriding System.out.println("플룻을 연주하다"); // overriding : 조상것이 호출이 안됌 } } class Violin extends Instrument { void play() { System.out.print..

Language/Java 2021.03.25

참조변수의 형변환// 다형성

*참조변수의 형변환을 하는 이유 : 멤버의 개수를 조절하기 위한 것이고 *조상 타입으로의 형변환을 생략할 수 있는 이유는 조상타입으로 형변화하면 다룰 수 있는 멤버의 개수가 *줄어들어 항상 안전하기 때문. *또한 코딩하기 더 쉽다. class Human { void speak () { System.out.println("여기는 조상클래스"); } } class Hong extends Human { void speak () { System.out.println("Hong"); } } class Kang extends Human { void speak () { System.out.println("Kang"); } } class Kim extends Human { void speak () { System.ou..

Language/Java 2021.03.25

다형성과 어노테이션(Annotation symbol), Override 활용

class figure { void Draw () { System.out.println("도형이 그려짐"); } } class Triangle extends figure { @Override void Draw() { System.out.println("Triangle 그려짐"); } } class Rectangle extends figure { @Override void Draw() { System.out.println("Rectangle 그려짐"); } } class Pentagon extends figure { @Override void Draw() { System.out.println("Pentagon 그려짐"); } } public class Test012 { public static void m..

Language/Java 2021.03.25

어노테이션 심볼(Annotation symbol)

어노테이션(Annotation symbol) : @기호가 붙은 컴파일링 정보용 주석 // 어노테이션(Annotation symbol) : @기호가 붙은 컴파일링 정보용 주석 // 주석 기호, 순서도에 메시지나 설명을 더하기 위해 사용되는 부호. class N { void test () { System.out.println("이건 조상 클래스의 메소드"); } } class O extends N { @Override // 이클립스에 의해 삽입된 어노테이션 // 유용하다. 습관화 ㄱㄱ void test() { super.test(); System.out.println("이건 자손 클래스의 메소드"); } } public class Test011 { public static void main(String[] ..

Language/Java 2021.03.25

캡슐화

if, for문을 사용해서 Limit 걸기 private int iSpeed; 를 건들 수 없다. 보호되어 있다 캡슐화 기법 int SpeedState 로 꺼내기(읽기) 210one2.tistory.com/97로 get, set생성 멤버변수의 값을 읽는 메서드의 이름 : get멤버변수 이름 으로 설정 : getter 멤버변수의 값을 변경하는 메서드의 이름 : set멤버변수 이름 으로 설정 : setter class Car { private int iSpeed; int SpeedState () { return iSpeed; // return 사용 값을 수정할 수 없지만 읽어 올 수 있다 } void Accel() { // if 문을 이용해서 iSpeed가 100이 넘으면 값을 100으로 설정. iSpeed..

Language/Java 2021.03.25

접근 제어자 (access modifier)

*접근 제어자가 default 인 것을 알리기 위해서 default를 쓰지는 않는다. 멤버변수의 값을 읽는 메서드의 이름 : get멤버변수 이름 : getter 멤버변수의 값을 변경하는 메서드의 이름 : set멤버변수 이름 : setter get, set 쉽게 불러오는 방법 > 210one2.tistory.com/97 class L { publicint iNum1 = 100; // 어떠한 경우라도 접근 가능 (공공 도로) protected int iNum2 = 100; // 상속 or 같은 패키지만 접근 가능 (동거인 or 가족) /*default*/ int iNum3 = 100; // 같은 패키지만 접근 가능 (동거인) private int iNum4 = 100; // 아무도 접근 못함 (개인 공간) ..

Language/Java 2021.03.25

import 문

선언 : import packagename.classname; > packagename 을 생략하고자 하는 클래스의 이름을 함께 씀 or import packagename.*; > * import문을 여러 번 사용하는 대신 , 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용 가능. > 컴파일러가 해당 패키지에서 일치하는 클래스 이름을 찾아야 하는 수고를 '더' 한다. 실행 성능의 차이는 없다. import java.util.Scanner; // package name //import 를 안쓰면 8번코드를 //java.util.Scanner aScanner = new java.util.Scanner(System.in); 이렇게 쳐야한다. // 매우 귀찮다.. public class Test004 ..

Language/Java 2021.03.25

package

선언 : package 패키지명; 선언 위치 : 반드시 주석과 공백을 제외한 제일 첫 번째 문장 package = 클래스의 묶음 모든 클래스는 반드시 하나의 package에 포함 되어야한다. 클래스명과 쉽게 구분하기 위해서 소문자로 하는것이 원칙 이때까지 package를 하지 않아도 된 이유 : Java가 알아서 unnamed package 에 속하게 만들었음 package를 만들면 같은 클래스 이름을 만들 수 있고 다른 개발자가 개발한 클래스 라이브러리의 클래스와 이름이 충돌 하는 것을 피할 수 있따.

Language/Java 2021.03.25

super(); 디폴트 생성자 연습

class C { // 디폴트 생성자를 자동으로 만들어준다. // 디폴트 생성자를 내가 직접 만들면 디폴트 생성자를 자동으로 안만들어줘서 내가 직접 만들어줘야 한다. } class D extends C { D () {// 디폴트 생성자 코드를 삽입하세요 super(); //부모 클래스의 디폴트 생성자를 호출 System.out.println("Hello class D"); // 디폴트 생성자는 "Hello class D"를 출력 } } public class Test002 { public static void main(String[] args) { D Obj = new D(); } } super(); 의 정확한 지정을 하는 이유 원하는게 있다면(구별을 하고 싶을 때) super(상속받은 클래스의 생성자의..

Language/Java 2021.03.25

인스턴스, 지역변수 연습

*this(); / super();은 생성자 this(); : 같은 클래스의 다른 생성자를 호출 super(); : 조상의 생성자를 호출 class A { int iNum = 100; } class B extends A { int iNum = 200; void Test(int iNum) { System.out.println(iNum); // Test iNum : 지역변수 System.out.println(this.iNum); // class B iNum : 인스턴스 System.out.println(super.iNum); // class A iNum : 인스턴스 상속받은 클래스 // 여기에 200을 가지고 있는 iNum을 출력하는 코드를 삽입해 보세요 } } public class Test001 { pu..

Language/Java 2021.03.25

super(); 과 에러발생시 해결법

빨간줄이 뜨는 이유 : Car 에 디폴트 생성자가 없기 때문, 이유 -> 내가 생성자를 만들면 이클립스에서 자동적으로 만드는 디폴트 생성자를 안만들어줌 /* super(); 가 오류가 날 때 해결법 1 : 조상의 디폴트 생성자를 생성한다. 2. 직접 super("현대",name);를 입력 super(); 조상의 생성자를 호출하기 위해 사용됨*/ class Hyundai extends Car { Hyundai (String Name) { // 여기에 빨간줄이 뜨는 이유 : Car 에 디폴트 생성자가 없기 때문, 내가 만들었다.생성자 //super(); // 부모의(Car)의 디폴트 생성자를 호출 super("현대",Name); // "현대"를 쓰는 이유 : Vender는 변하지 않는 값임 : 이 회사의 브..

Language/Java 2021.03.24

오버라이딩의 조건

// 상속할 경우 생성자에 관한 여러가지들 : 조상 클래스의 디폴트 생성자 자동 호출 // 오버라이딩의 조건 class Parent { String name; Parent() { System.out.println("조상 인스턴스 생성"); // 중요 : 출력 순서 1 } Parent(String name) { //ㅁㅁㅁㅁㅁㅁㅁㅁㅁ 부분이 호출됨 this.name = name; System.out.println(name+ " 인스턴스 생성"); // 중요 : 출력 순서 1 } } class Child extends Parent{ String name; Child() { super(); //부모의 디폴트 생성자 Parent()를 호출 생략이 되어 있음 // super(); 조상의 생성자를 호출하기 위해 사용..

Language/Java 2021.03.24

overriding 오버라이딩

같음 메소드 이름이라도 덮어쓰기가 가능하다. // overriding 오버라이딩 : 조상클래스로 부터 메서드의 내용을 변경하는 것. // overriding : 덮어쓰다. class Instrument { void play() { System.out.println("연주하다"); } } class Flute extends Instrument { void play() { //method overriding System.out.println("플룻을 연주하다"); // overriding : 조상것이 호출이 안됌 } } class Violin extends Instrument { void play() { System.out.println("바이올린을 연주하다"); // overriding : 조상것이 호출이..

Language/Java 2021.03.24

상속 extends 예제

Tv는 SmartTv를 상속 받았다. * Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상 클래스. (자동으로 상속 시킨다.) * 코드를 수정하지 않고 추가적인 부분만 따로 상속 시켜서 코드의 재사용을 할 수 있다. class Tv { boolean power; // 전원상태 on,off int channel; // 채널 void power() { power = !power; } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { // SmartTv는 Tv에 캡션(자막)을 보여주는 기능을 추가 boolean caption; // 캡션상태(on/off) SmartTv클래스의..

Language/Java 2021.03.24

extends 상속

// 상속 개념 extends class F { // ex 10가지 기능 int iNum1 = 100; void test1() { // 메서드 System.out.println("나는 F객체임"); } } class G extends F{ // 상속 받았다 F한테 // G= 자손 클래스, F = 조상 클래스// G 3가지 기능 = 13가지 기능 int iNum2 = 200; void test2() { System.out.println("나는 G객체임"); } } public class Test006 { public static void main(String[] args) { G Obj = new G(); // 객체 G를 만듬 System.out.println(Obj.iNum1); System.out.pr..

Language/Java 2021.03.24

가짜 println만들기...? // class별 out 사용법.

System1 안에 있는 E클래스 class System1 { static E out = new E(); // 밖으로 내보내라 생성된 new E를 만들어서 } class E { void println(String Temp) { // println 이라는 메서드를 만들어 줌. System.out.println("[[" + Temp + "]]"); } } class C { int CNum = 100; D out = new D(); } class D { int DNum = 200; void println(String Temp) { System.out.println("[" + Temp + "]"); } } public class Test005 { public static void main(String[] arg..

Language/Java 2021.03.24

이너 클래스 inner class

컴파일 하면 이상하게 생겼음 A$B 처럼 $가 붙어있음. // 이너 클래스의 존재에 대해 알아봤습니다. class A { // A객체를 만들면 B객체도 만든다. int ANum = 100; class B { // 이너 크래스 inner class int BNum = 200; } } public class Test004 { public static void main(String[] args) { A obj1 = new A(); // new : 인스턴스 (객체) A.B obj2 = obj1.new B(); // 이너 클래스 B의 인스턴스 생성법. System.out.println(obj1.ANum); } }

Language/Java 2021.03.24

static 3

// static 3 : 그렇다면 main 은?????? /* * 1. main 메서드는 클래스 안에 만들어 진다. * 2. main 메서드는 static을 선언 해야한다. * why??? : JVM에서 객체 생성 없이 호출됨으로 * JVM이 호출할 때 => Test003.main(""); 식으로 호출한다. */ public class Test003 { int iNum1 = 100; // 인스턴스 변수 void test1() { // 인스턴트 메서드 } static int iNum2 = 100; // static 변수 static void test2 () { // static 메서드 } public static void main(String[] args) { // main 앞에 static이 들어가는 이..

Language/Java 2021.03.24

static 02

*static 메서드 : 객체 없이도 사용 가능한 메서드 static 변수 1 일반 변수와 사용하는 방법이 비슷 2 객체(인스턴스) 없이도 접근 가능 3 해당 클래스로 만들어진 전체 객체에서 1개만 생성되며 그 객체간 공유됨 * static 은 static에만 접근이 가능 *인스턴스는 둘다 접근 가능 // static 2 : static을 메서드 앞에 붙이는 경우 class Spring02 { int iNum1 = 100; // 인스턴스 변수 : 인스턴스가 생성되어야 사용가능 ㅁㅁ static int iNum2 = 200; // static 변수 : void Hello1 () { System.out.println("////////////////////////"); System.out.println("술 ..

Language/Java 2021.03.24

멤버 변수와 초기화

초기화 블럭 ; 인스턴스 초기화 블럭 : 단순히 클래스 내에 블럭 { }을 만들고 코드작성 클래스 초기화 블럭 ?: 인스턴스 초기화 블럭 { } 앞에 단순히 static을 붙이기 --개념-- 명시적 초기화 ; 변수를 선언과 동시에 초기화 하는 것. 멤버 ; 메서드 이름, 변수 이름 라고 알기만 해둬랑~ class Ex6_14 { //멤버변수의 수행순서? static { System.out.println("static { }"); } { System.out.println("{ }"); } public Ex6_14() { System.out.println("생성자"); } public static void main(String[] args) { System.out.println("Ex6_14 bt = new..

Language/Java 2021.03.24

static 01

// static 1 : static을 변수 앞에 붙이는 경우 - Static variable 스태틱 변수 // class (static) 변수 : 객체 없이도 사용 가능한 변수 : 실행전에 이미 생성되어 있음 (인스턴스) class Spring01 { int iNum1 = 100; // 인스턴스 변수 : 인스턴스가 생성되어야 사용가능 ㅁㅁ static int iNum2 = 200; // 클래스(static) 변수 : 인스턴스가 생성없이도 사용가능 ㅇㅇ } //But 객체지향에는 안맞음;;;; public class Test001 { public static void main(String[] args) { // case 3 : 공용으로 사용되는 클래스 변수 /*Spring01 A = new Spring0..

Language/Java 2021.03.24

매개변수가 있는 생성자 예제

//매개변수가 있는 생성자 예제 class Car3 { String color; String gearType; int door; // C1 Car3() { // C1 } Car3(String c, String g, int d) { // C2 타입을 이미 설정해 두었다 color = c; gearType = g; door = d; } } public class Ex6_12 { public static void main(String[] args) { Car3 c1 = new Car3(); c1.color = "white"; c1.gearType = "auto"; c1.door = 4; // C1 Car3 c2 = new Car3("white", "auto", 4); // C2 System.out.printl..

Language/Java 2021.03.23

this()의 사용법

//this : this()의 사용법 - 생성자에서 다른 생성자를 호출하는 기법 // ** 제약조건 : this()는 생성자 제일 첫 번째줄에만 가능하다.** class SpringMemberA { String name; //인스턴스 변수 String phone; String major; SpringMemberA(String name,String phone) { //지역변수 this(name,phone,"자바"); //**this()는 생성자 제일 첫 번째줄에만 가능하다.** // 13번의 코드가 7번의 코드를 다 할줄 알기 때문에 일을 떠넘기는것. // 코드의 중복을 막는다 = 객체 지향 /*this.name = name; // this == 인스턴스 변수를 참조 this.phone = phone; /..

Language/Java 2021.03.23

오버로딩

객체지향 = 코드의 중복을 피한다. public class Test005 { // 객체지향 용어 : 메서드 오버로딩(Method Overloading) // 한 클래스 내에 같은 이름의 메서드를 여러 개정의하는 것 // 메서드 이름이 같아야 한다. //매개변수의 개수 또는 타입이 달라야 한다. //3.반환 타입은 관계없다. //생성자도 오버로딩이 가능하다. public static String add(String String1, String String2) { return String1 + String2; } public static double add(double dNum1, double dNum2) { System.out.println("int short"); // 이렇게하는건 별로다 return d..

Language/Java 2021.03.23

this. 인스턴스 변수를 지정

class SpringMember { String name; //인스턴스 변수 String phone; String major; SpringMember(String name,String phone,String major) { //지역변수 this.name = name; // this == 인스턴스 변수를 참조 this.phone = phone; // 인스턴스 변수를 참조하여 생성자를 만든다. this.major = major; } void State() { //State 는 한번에 출력하기 위함 System.out.println("이름 : "+ this.name); System.out.println("전화 : "+ this.phone); // this.생략은 가능하다. System.out.println(..

Language/Java 2021.03.23

생성자

// 예약어 : 프로그래밍 언어에서 미리 등록되어진 단어 ex) int, break 변수이름으로 할 수 없다. class Car2 { //class Car 를 생성 //변수 String color; String vender; String name; int speed; Car2() { // Car2의 생성자 : 객체를 생성할 때 JVM에 의해 자동으로 호출되는 특수한 메서드 vender = "미정"; color = "하양"; name = "미정"; // speed는 0으로 들어가 있다. System.out.println("Car2의 생성자 호출됨"); return; } void SpeedState() { //메소드 System.out.println("현재 속도는 ["+ speed + "]Km 입니다.");..

Language/Java 2021.03.23