코딩성장스토리

자바:Java(3) 본문

백 엔드/java

자바:Java(3)

까르르꿍꿍 2021. 10. 27. 17:00

1.생성자

생성자를 선언 

생성자는 리턴형을 가지고 있지 않고 프로그래머가 생성자를 만들지 않으면 컴파일할 때 매개변수가 없는 생성자가 자동으로 만들어집니다.

매개변수가 없는 생성자를 기본 생성자라고 한다.

ex)car c1=new car();  //생성자를 호출하고 있다. 

public class 클래스명{
	자료형 필드명;
    public 클래스명(매개변수 목록){//생성자 블록  
    
    }
}

만약 생성자를 매개변수 있이 만들어보자

package javaStudy;

public class car{
	string name;
    int number;
    
    public car(String n){
    	name=n;
    }
}
public class carexam2{

	public static void main(String[] args){
    //	car c1=new car();
        car c2=new car("소방차");
   }
}

2.this

this 키워드는 내 구성 요소라는 의미를 지니고 있다.

public class car{
	string name;
    int number;
    
    public car(String name){
    	this.name=name;   //this 내 필드내의 name의  name을 넣어달라는 의미
    }
}

3.메서드 오버로딩

똑같은 이름으로 메서드 세 개를 정의가능 매개변수는 달라야함

package javastudy;

public class MyClass2{
	public int plus (int x,int y){
    	return x+y;
    }
    
    public int plus (int x,int y,int z){
    	returb x+y+z;
   	}
    
    public String plus (String x,String y){
    	return x+y;
    }
}

3.생성자 오버로딩과 this

package javaStudy;

public class Car{
	String name;
    int number;
    
    public Car(String name){
    	this.name=name;
    }
    
    public car(){
    
    }
    
    public Car(String name, int number){
    	this.name=name;
        this.number=number;
    }
}

4.패키지

다른 패키지에 들어 있는 클래스를 사용하려면 import란 키워드를 사용해야 합니다. import란 다른 패키지에 들어있는 클래스를 사용하기 위한 키워드다

package javaStudy;

import com.eightcruz.javastudy.Hello;   //co,eightcruz.javastudy 패키지 안에 있는 hello 클래스를 쓰겠다고 선언

public class HelloExam{
	public static void main(String[] args){
    	Hello hello = new Hello();
    }
}

5,상속

자식이 부모에게 상복받은 것을 사용할 수 있듯이 여기서의 상속 개념도 동일하다.

하지만 부모 클래스는 자식 클래스의 메서드를 사용할 수 없다.

package javaStudy;

public class BusExam {
	
	public static void main(String[] args) {
		Bus bus=new Bus();
		bus.run();
        bus.ppangppang();
        
        Car car=new Car();
        car.run();
        car.ppangppang();//실행 안됨 ppangppang함수는 bus클래스 즉 자식 클래스라 사용불가능
	}
}
package javaStudy;

public class Bus extends car {   //Bus클래스는 car클래스를 상속한다
	public void ppangppang(){
    	System.out.println("빵빵");
}
package javaStudy;

public class car {
	public void run() {
		System.out.print("성공");
	}
}

6.접근 제한자

public: 모든 접근을 허용

protected: 같은 패키지 &상속을 받은 다른 패키지의 접근을 허용

private: 자기 자신의 접근만 허용

default:자기 자신&자기 자신과 같은 패키지 안에서 접근을 허용

 

접근제한자의 접근범위

public>protected>default>private

package javastudy;

public class accessobj{
	public int p=3;
    protected int p2=4;
    private int i=1;
    int k=2;
}
ex1)
package javastudy;

public class accessobjexam{
	public static void main(String[] args){
    	accessobj obj=new accessobj();
        System.out.println(obj.p);
        System.out.println(obj.p2);
        System.out.println(obj.i);//컴파일 오류가 발생
        System.out.println(obj.k);
    }
}

ex2)
package 다른 패키지;

public class accessobjexam{
	public static void main(String[] args){
    	accessobj obj=new accessobj();
        System.out.println(obj.p);
        System.out.println(obj.p2);//컴파일 오류가 발생
        System.out.println(obj.i);//컴파일 오류가 발생
        System.out.println(obj.k);//컴파일 오류가 발생
    }
}

ex3)accessobjexam 이 accessobj를 상속하고 있다면
package 다른패키지;

public class accessobjexam{
	public static void main(String[] args){
    	accessobj obj=new accessobj();
        System.out.println(obj.p);
        System.out.println(obj.p2);
        System.out.println(obj.i);//컴파일 오류가 발생
        System.out.println(obj.k);//컴파일 오류가 발생
    }
}

7.추상 클래스

말그대로 추상클래스는 이 메서드가 모호한 메서드일 떄 사용한다

 

package javastudy;

public abstract class Bird{
	public abstract void sing();  //메서드가 하나라도 추상이면 클래스도 추상이 된다.
}
package javastudy;

public class Duck extends Bird{  //
	@override
    public void sing(){
    	System.out.prinln("꽥꽥!!");
    }
}
public class duckexam{
	public static void main(String[] args){
    	Duck duck=new Duck();
        duck.sing();
        
        Bird b=new Bird();     //컴파일 에러 이유:추상클래스는 부모클래스로 사용가능 but객체를 생성 안됨
   }
}

8.super클래스 

super 클래스는 부모의 생성자를 호출하는 거다.

truck이 car이란 클래스를 상속하고 truck생성자를 호출할때 super()을 해주면 car생성자도 호출 된다.

public javastudy;

public class truck extends car{
	public truck(){
    	super();//car생성자 호출
        System.out.println("truck의 기본생성자입니다.");
   }
}

 

9.오버라이딩

오버라이딩이란 부모가 가진 메서드와 똑같은 모양의 메서드를 자식이 가지는 것

똑같은 메서드를 실행하면 자식클래스의 메서드 실행이된다

같이 실행하려면 

super.run();하면 부모도 실행이 된다.

package javastudy;

public class Van extends Car{
	public void run(){
    	System.out.println("van");
    }
}
public class Car{
	public void run(){
    	System.out.println("Car");
   }
}
public class vanexam{
	public static void main(String[] args){
    	Van van=new Van();
        van.run;   //van의 run 호출
    }
}

10.클래스 형변환

1.작은 그릇에서 더 큰 그릇으로 옮기는 것이면 컴파일 오류 발생안하고 형 변환가능

2.큰 그릇에서 더 작은 그릇으로 옮기는 것이면 컴파일 오류 발생함

즉 

car c= new van();

은 가능하다 car가 van의 부모이기 때문에 van의 내용을 담을 수 있다.

그리고 van van =c;는 불가능하다

하지만 van van = (van)c ;로 묵시적 형변환을 하면 가능하다.

그리면 van은 van의 메서드와 c의 메서드 둘 다 이용가능하다.

 

'백 엔드 > java' 카테고리의 다른 글

자바의 역사와 이  (0) 2022.04.02
자바 공부하면서 주의한것  (1) 2021.12.04
자바:Java(4)  (1) 2021.10.28
자바:Java(2)  (0) 2021.10.26
자바:Java (1)  (0) 2021.10.25