상속은 extends 를 사용하면 된다

 

부모가 가진 기능을 덮어씀으로써 제어할 수 있다 그것을 오버라이드 혹은 오버라이딩이라고 한다

 

오버라이딩은 덮어쓰기 기존에 부모 class에 존재하는 method를 재정의

 

오버로딩은 과적 기존에 존재하는 method와 동일한 이름의 method를 형태만 다르게 사용

 

this는 자기 자신 super는 부모를 의미

 

생성자가 있는 부모 클래스를 상속받으려면 생성자도 함께 상속 받아야 한다

 

class Cal{
    int v1,v2;
    Cal(int v1, int v2){
        System.out.println("Cal init!!");
        this.v1 = v1; this.v2 = v2;
    }
    public int sum(){return this.v1+v2;}
}
class Cal3 extends Cal{
    Cal3(int v1, int v2) {
        super(v1, v2);
        System.out.println("Cal3 init!!");
    }
    public int minus(){return this.v1-v2;}
}
public class InheritanceApp {
    public static void main(String[] args) {
        Cal c = new Cal(2,1);
        Cal3 c3 = new Cal3(2, 1);
        System.out.println(c3.sum()); // 3
        System.out.println(c3.minus()); // 1
    }
}

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

공부(16)  (0) 2021.09.25
공부(15)  (0) 2021.09.25
공부(14)  (0) 2021.09.25
공부(13)  (0) 2021.09.25
공부(12)  (0) 2021.09.24

활용 - 클래스화

 

class Accounting{
    public static double valueOfSupply;
    public static double vatRate = 0.1;
    public static double getVAT() {
        return valueOfSupply * vatRate;
    }
    public static double getTotal() {
        return valueOfSupply + getVAT();
    }
}

public class AccountingApp {
    public static void main(String[] args) {
    	Accounting.valueOfSupply = 10000.0;
        System.out.println("Value of supply : " + Accounting.valueOfSupply);
        System.out.println("VAT : " + Accounting.getVAT());
        System.out.println("Total : " + Accounting.getTotal());
 
    }
 
}

Accounting을 클래스로 묶어놓고 사용할 때는 Accounting. 으로 사용하면 된다

 

인스턴스화

 

class Accounting{
    public double valueOfSupply;
    public static double vatRate = 0.1;
    public Accounting(double valueOfSupply) {
    	this.valueOfSupply = valueOfSupply;
    }
    public double getVAT() {
        return valueOfSupply * vatRate;
    }
    public double getTotal() {
        return valueOfSupply + getVAT();
    }
}

public class AccountingApp {
    public static void main(String[] args) {
    	Accounting a1 = new Accounting(10000.0);
    	
    	Accounting a2 = new Accounting(20000.0);
    	
        System.out.println("Value of supply : " + a1.valueOfSupply);
        System.out.println("Value of supply : " + a2.valueOfSupply);
        
        System.out.println("VAT : " + a1.getVAT());
        System.out.println("VAT : " + a2.getVAT());
        
        System.out.println("Total : " + a1.getTotal());
        System.out.println("Total : " + a2.getTotal());
    	
    }
}

static을 사용하면 메모리를 사용하지 않아도 되기 때문에 컴퓨터 자원을 절약할 수 있다

 

인스턴스는 new로 복제품을 만들고 호출할 때는 a1. 이런식으로 사용하면 된다

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

공부(17)  (0) 2021.09.26
공부(15)  (0) 2021.09.25
공부(14)  (0) 2021.09.25
공부(13)  (0) 2021.09.25
공부(12)  (0) 2021.09.24

생성자와 this

 

생성자는 클래스의 이름과 같은 함수를 작성하고 클래스에서 가장 먼저 실행되는 것

 

this는 인스턴스화 되었을 때 인스턴스를 가리킨다

 

public class MyOOP {
    public static void main(String[] args) {
        Print p1 = new Print("----");
        p1.A();
        p1.A();
        p1.B();
        p1.B();
 
        Print p2 = new Print("****");
        p2.A();
        p2.A();
        p2.B();
        p2.B();
         
         
        p1.A();
        p2.A();
        p1.A();
        p2.A();
    }
}

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

공부(17)  (0) 2021.09.26
공부(16)  (0) 2021.09.25
공부(14)  (0) 2021.09.25
공부(13)  (0) 2021.09.25
공부(12)  (0) 2021.09.24

인스턴스

 

클래스와 인스턴스 차이점은 클래스가 원본이라면 인스턴스는 원본의 구성을 일부 바꿀 수 있다

 

인스턴스는 클래스를 재료로 사용할 때 세분화시키고 싶다면 클래스의 내용을 일부 바꾸고 이름으로 구분지어 쓸 수 있다

 

인스턴스로 사용할 때에는 static을 제거해주어야 한다

 

class Print {
    public String delimiter = "";
 
    public void A() {
        System.out.println(delimiter);
        System.out.println("A");
        System.out.println("A");
    }
 
    public void B() {
        System.out.println(delimiter);
        System.out.println("B");
        System.out.println("B");
    }
}

 

public class MyOOP {
    public static void main(String[] args) {
    	Print p1 = new Print();
    	p1.delimiter = "----";
    	p1.A();
    	p1.A();
    	p1.B();
    	p1.B();
    	
    	Print p2 = new Print();
    	p2.delimiter = "****";
    	p2.A();
    	p2.A();
    	p2.B();
    	p2.B();
         
        p1.A();
        p2.A();
        p1.A();
        p2.A();
    }
}

 

static

 

Static은 Class 소속이고  Static이 없으면 Instance 소속으로 보면 된다

 

Class 로 Instance를 복사해서 만들었을 때, Instance 안에 들어가있는 Static 값을 변경하면 기존에 있는 method,Variable 의 값도 같이 변경된다.

 

Instance 안에 들어가있는 Static이 없는 Instance method,Variable의 값을 변경할 경우 복제품인 Instance 에만 적용된다.

 

Class 소속에선 Instance를 부를수 없지만, Instance 소속에선 Class,Instance 모두 부를수 있다.

 

class Foo{
	public static String classVar = "I class var";
	public String instanceVar = "I instance var";
	public static void classMethod() {
		System.out.println(classVar); // Ok
//		System.out.println(instanceVar); // Error
	}
	public void instanceMethod() {
		System.out.println(classVar); // Ok
		System.out.println(instanceVar); // Error
	}
}
public class StaticApp {

	public static void main(String[] args) {
		System.out.println(Foo.classVar); // OK
//		System.out.println(Foo.instanceVar); // Error
		Foo.classMethod();
//		Foo.instanceMethod();
		
		Foo f1 = new Foo();
		Foo f2 = new Foo();
		
		System.out.println(f1.classVar); // I class var
		System.out.println(f1.instanceVar); // I instance var
		
		f1.classVar = "changed by f1";
		System.out.println(Foo.classVar); // changed by f1
		System.out.println(f2.classVar); // changed by f1
	
		f1.instanceVar = "changed by f1";
		System.out.println(f1.instanceVar); // changed by f1
		System.out.println(f2.instanceVar); // I instance var
	}

}

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

공부(16)  (0) 2021.09.25
공부(15)  (0) 2021.09.25
공부(13)  (0) 2021.09.25
공부(12)  (0) 2021.09.24
공부(11)  (0) 2021.09.24

+ Recent posts