null 원리 / garbage collection
null을 대입하면 어떠한 객체도 가리킬 수 없다.
garbage collection : 객체를 어떤 변수도 참조하지 않으면 Java의 판단에 따라 객체가 소멸되고 객체를 생성하기 전의 상태로 돌아감.
상속 슈퍼클래스 / 서브클래스
package kr.or.ksmart;
class SuperClass {
private String name;
public SuperClass () {
System.out.println("슈퍼클래스 호출");
}
public SuperClass(String name) {
this.name = name;
System.out.println("슈퍼클래스 생성자 메서드 오버로딩 호출");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class SubClass extends SuperClass {
public String age;
public SubClass () {
System.out.println("서브클래스 호출");
}
public SubClass(String name) {
super(name);
System.out.println("서브클래스 생성자 메서드 오버로딩 호출");
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
public class JavaBasic06 {
public static void main(String[] args) {
/*
* 상속
* 이미 생성된 클래스를 상속하여 확장한다.
* 확장 대상 클래스는 슈퍼클래스, 확장 실행하는 클래스는 서브클래스이다.
* extends 라는 키워드를 활용하여 가능하다.
* 서브클래스는 슈퍼클래스의 필드 및 메서드를 가진다.
* 접근지정자의 영향을 받는다.
* 서브클래스에서 부모클래스를 가르키는 키워드는 super 이다.
* super. 부모 메서드 혹은 부모의 필드
* super() 부모 생성자 메서드
*/
/*SubClass subClass = new SubClass();
subClass.setName("홍길동");
subClass.setAge("20");
System.out.println(subClass.getName());
System.out.println(subClass.getAge());*/
/*SuperClass superClass = new SuperClass();
superClass.setName("이순신");
System.out.println(superClass.getName());*/
SubClass subClass = new SubClass("홍길동");
subClass.setAge("20");
System.out.println(subClass.getName());
System.out.println(subClass.getAge());
}
}
package kr.or.ksmart;
class SuperClass2 {
public SuperClass2(String name) {
System.out.println("슈퍼클래스 인수 : "+name);
}
}
class SubClass2 extends SuperClass2 {
public SubClass2(String name) {
super(name); //슈퍼클래스의 생성자를 골라서 호출 가능
System.out.println("서브클래스 인수 : "+name);
}
}
public class JavaBasic07 {
public static void main(String[] args) {
SubClass2 subClass2 = new SubClass2("홍길동");
}
}
객체지향 4대조건 : 상속 추상화 캡슐화 다형성
다형성 / 업캐스팅 / 다운캐스팅
package kr.or.ksmart;
import javax.jws.soap.SOAPBinding;
class Car {
private int num;
private int gas;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getGas() {
return gas;
}
public void setGas(int gas) {
this.gas = gas;
}
@Override
public String toString() {
return "Car [num=" + num + ", gas=" + gas + "]" ;
}
}
class Bus extends Car {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Bus [name=" + name + "] "+ super.toString();
}
}
class Sport extends Car {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Sport [name=" + name + "] " + super.toString();
}
}
public class JavaBsic01 {
public static void main(String[] args) {
/*
* 다형성
* 하나의 클래스를 상속받아 여러개의 클래스로 확장하는 경우
* 상속의 주체가 되는 슈퍼클래스의 참조타입으로 업캐스팅이 가능하며,
* 업캐스팅된 객체로 비지니스 로직 처리가 가능하다.
*
* 업캐스팅
* 상속받아 객체화된 대상을 슈퍼클래스 참조타입으로 캐스팅 하는 것
*
* 다운캐스팅
* 객체화된 부모클래스에서 상속을 받은 서브클래스로 캐스팅 되는 것
*/
String type = "sport";
Car car = null;
if("bus".equals(type)) {
Bus bus = new Bus();
bus.setNum(1000);
bus.setGas(1000);
bus.setName("내버스");
/*System.out.println(bus.getNum());
System.out.println(bus.getGas());
System.out.println(bus.getName());*/
System.out.println(bus.toString());
car = bus; //UpCasting
} else if ("sport".equals(type)){
Sport sport = new Sport();
sport.setNum(2000);
sport.setGas(2000);
sport.setName("내스포츠카");
/*System.out.println(sport.getNum());
System.out.println(sport.getGas());
System.out.println(sport.getName());*/
System.out.println(sport.toString());
car = sport; //UpCasting
}
/**
* 슈퍼클래스를 참조타입으로 서브클래스 인스턴스화 하기
* 참조타입의
*/
Car car2 = null;
if("bus".equals(type)) {
car2 = new Bus();
car2.setNum(1000);
car2.setGas(1000);
} else if ("sport".equals(type)) {
car2 = new Sport();
car2.setNum(2000);
car2.setGas(2000);
}
System.out.println("----------------------------------------------------");
System.out.println(car2.toString());
//UpCasting
Car car3 = new Bus();
//DownCasting
Bus bus = (Bus) car2;
System.out.println(bus.toString());
}
}
package kr.or.ksmart;
class Car2 {
private int num;
private int gas;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getGas() {
return gas;
}
public void setGas(int gas) {
this.gas = gas;
}
@Override
public String toString() {
return "Car2 [num=" + num + ", gas=" + gas + "]";
}
}
class Bus2 extends Car2 {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Bus2 [name=" + name + "] " + super.toString();
}
}
class Sport2 extends Car2 {
private char course;
public char getCourse() {
return course;
}
public void setCourse(char course) {
this.course = course;
}
@Override
public String toString() {
return "sport2 [course=" + course + "] " + super.toString();
}
}
public class JavaBasicEx01 {
public static void main(String[] args) {
/*
* 실습3. Car2라는 클래스가 있다.
* Car2를 기준으로 다른 아래의 클래스를 확장시켜 다형성을 이용하여 비지니스 로직을 처리할 것이다.
* 아래의 클래스를 확장시켜 다형성 코드를 완성하여라.
* 서브클래스 명 : Bus2, Sport2
*/
Car2 car2 = null;
String type = "sport";
if("bus".equals(type)) {
Bus2 bus2 = new Bus2();
bus2.setName("시내버스");
bus2.setNum(1234);
bus2.setGas(5000);
System.out.println(bus2.toString());
car2 = bus2;
} else if ("sport".equals(type)) {
Sport2 sport2 = new Sport2();
sport2.setCourse('D');
sport2.setNum(4321);
sport2.setGas(5555);
System.out.println(sport2.toString());
car2 = sport2;
}
}
}
업캐스팅 / 다운캐스팅
package kr.or.ksmart;
class MyClass{
public String myName;
}
public class JavaBasic02 {
public static void main(String[] args) {
/*Object myClass = new MyClass();
myClass.myName < x*/
MyClass myClass = new MyClass();
myClass.myName = "홍길동";
Object myClassObject = myClass; //오브젝트 클래스로 업캐스팅
MyClass myClass2 = (MyClass) myClassObject; //다운캐스팅
//에러발생
//JavaBasic02 myClass3 = (JavaBasic02) myClassObject;
System.out.println(myClass2.myName);
}
}
'JAVA' 카테고리의 다른 글
[JavaBasic] 추상화 실습 (0) | 2020.04.28 |
---|---|
[JavaBasic] 오버라이딩 / final / 추상클래스 (0) | 2020.04.28 |
[Java Basic] 생성자 / 오버로딩 (0) | 2020.04.22 |
[Java Basic] Casting / Array (0) | 2020.04.22 |