-
set,get,상속,overriding & overloadingJAVA 2021. 7. 22. 22:45
set&get
class의 생성자를 만들었지만 필드가 private으로 접근 불가한 경우
set과 get메서드를 만들어 세팅할 수 있다.(boolean형은 set이 아닌 is로 관례상 사용한다.)
오른쪽마우스 -> source -> generate getter setter
: 자동으로 set,get메서드가 만들어진다.
사용하는 이유?: 메서드로 접근하게 하면 메서드안에 조건을 달아서 변수를 설정하게 할 수 있다.
12345678910111213141516171819202122232425262728package com.lack206.ex10_get_set;public class Car {//필드private int speed = 100;private boolean stop = false;//메서드public void setSpeed(int speed) {this.speed = speed;}//boolean형은 set이 아니라 is로 사용한다.public void isStop(boolean stop) {this.stop = stop;}public int getSpeed() {return speed;}public boolean getStop() {return stop;}}cs 1234567891011121314151617181920public class CarMain {public static void main(String[] args) {Car car = new Car();// car.speed = 30;// car.stop = true;car.setSpeed(30);car.isStop(true);int aaa = car.getSpeed();boolean bbb = car.getStop();System.out.println("현재속도 = " + aaa + "km/h");System.out.println("운행여부 = " + bbb);}}cs
set&get2
1234567891011121314151617181920212223242526272829303132333435public class Car1 {private int speed;private boolean stop;public int getSpeed() {return speed;}public void setSpeed(int speed) {if (speed > 300) {System.out.println("최고속도는 " + speed + "km를 넘을 수 없습니다.");this.speed = 0;} else {System.out.println("현재속도는 " + speed + "km입니다.");this.speed = speed;}}public boolean getStop() {return stop;}public void isStop(boolean stop) {if (speed == 0) {this.stop = true;System.out.println("자동차 운행중지");} else {this.stop = false;System.out.println("자동차 운행중지");}}}cs 12345678910111213141516public class Car1Main {public static void main(String[]args) {Car1 car = new Car1();car.setSpeed(250);car.isStop(false);System.out.println(car.getSpeed());System.out.println(car.getStop());car.setSpeed(0);System.out.println(car.getSpeed());System.out.println(car.getStop());}}cs
상속
상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
부모의 메서드를 상속받아 사용할 수 있다.
중복된 코드를 줄일 수 있고 다형성을 구현할 수 있다
다형성 : 객체지향에서 중요한 개념
방법(선언)
자식 클래스 뒤에 extends 키워드를 사용하고 부모 클래스를 적어준다.
1 class 자식클래스 extends 부모클래스{} cs overriding & overloading
오버라이딩은 자식클래스가 부모클래스의 메서드(메서드명,매개변수, 리턴타입은 동일)를 새로 정의하는것.
오버로딩은 같은 클래스내에서 메서드(메서드명만 동일,리턴타입은 상관없음) 또는 생성자를
매개변수값을 다르게하여 오버해서 로드(적재)하는 것.
(생성자는 매개변수의 이름은 아무거나 상관 없기 때문에 매개변수의 변수형의 갯수와 위치가 달라야 한다.)
Human : 부모클래스
Adam, Eve, Korean : 자식클래스
123456789101112131415161718192021222324252627public class Human {String name;String gender;int age;//default 생성자가 없어짐//default 생성자를 정의해주거나,//자식클래스들이 따로 매개변수를 가진 부모생성자를 호출해야 함.// Human(String name){}void speak() {System.out.println("말을 한다.");}void eat() {System.out.println("음식을 먹는다.");}void move() {System.out.println("움직인다.");}@Overridepublic String toString() {return "이름 = " + name + ", 성별 = " + gender + ", 나이 = " + age;}}cs 1234567public class Adam extends Human{@Overridevoid move() {System.out.println("사냥을 한다.");}}cs 12345678910111213141516171819202122232425262728public class Eve extends Human {public Eve() {super();// 부모가 먼저 생성이 되어야 하는데 자바에서는 생략해도 자동으로 해준다.name = "이브";gender = "여자";age = 9000;// super(); 오류, 부모가 나중 생성되면 안된다.}Eve(String name, String gender, int age) {this.name = name;this.gender = gender;this.age = age;}@Overridevoid move() {System.out.println("음식을 만든다.");}void makeBaby() {System.out.println("아이를 갖는다!");}}cs 12345678public class Korean extends Human{@Overridevoid speak() {System.out.println("한국말을 한다.");}}cs 12345678910111213141516171819202122232425262728293031public class HumanMain {public static void main(String[] args) {Human human = new Human();human.move();System.out.println();Adam adam = new Adam();adam.name = "아담";adam.gender = "남자";adam.age = 10000;adam.move();// adam.makeBaby(); eve클래스에서 정의한 메서드이므로 당연히 사용 불가능System.out.println(adam.toString());System.out.println();Eve eve = new Eve();eve.move();eve.makeBaby();System.out.println(eve.toString());System.out.println();Eve eve2 = new Eve("이브","여자",8776);System.out.println(eve2.toString());Korean kor = new Korean();kor.speak();}}cs
상속2
객체지향 프로그래밍에서는 부모클래스의 멤버(필드, 메서드)를 자식클래스에 물려줄 수 있는데
부모 클래스를 상위클래스라 하고 자식클래스를 하위클래스 라 한다.
상속은 이미 잘 개발된 클래스를 재사용하여 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다.
상속을 통해 부모클래스의 필드와 메서드를 재사용하고 자식클래스에서 사용할 필드와 메서드만 정의하면 보다 효율적이고 개발시간의 단축과 유지보수가 용이하게 된다.
상속을 한다해도 private로 정의 필드와 메서드는 상속을 받을 수가 없으며 자바에서는 다중상속을 허용하지 않는다.
1234567891011121314151617181920212223242526272829303132public class SmartPhone extends CellPhone {int channel;// 생성자/*상속을 받을 경우에 개발자가 추가한 생성자가 없을 경우에 기본생성자를 정의하지 않아도되기 때문에 자식생성자에 부모의 기본생성자 super()가 자동으로 추가된다.자식이 생성되기 전에 부모객체가 존재해야 하기 때문이다. 부모생성자를 호출한 후에부모객체가 생성된 후에 자식객체가 생성되기 때문이다. 여기서 super()는 부모생성자를 호출하는명령이다. 주의할 점은 부모생 성자를 호출할 경우에는 자식생성자의 맨 처음에 정의가 되어야 한다.*/public SmartPhone() {super("스마트폰", "분홍");// 부모생성자를 먼저 생성// default생성자가 있을땐 자바에서 알아서 해줬지만, 지금은 부모클래스에 default 생성자가 없다.}public SmartPhone(String model, String color, int channel) {super(model, color);this.channel = channel;this.model = model;this.color = color;}void internetSearch() {System.out.println("인터넷검색을 합니다.");}}cs
final로 된 클래스와 메서드 상속,오버라이드 불가능1
1public final class Member {}cs 1234// public class VIPMember extends Member { final로 생성된 클래스는 상속불가능.public class VIPMember {}cs final로 된 클래스와 메서드 상속,오버라이드 불가능2
123456789public class Car {int speed;void speedUp() {speed += 1;}final void stop() {speed = 0;}}cs 123456789101112131415161718192021public class CarMain extends Car{@Overridevoid speedUp() {// TODO Auto-generated method stubsuper.speedUp();}// final메소드는 오버라이드 할 수 없다.// @Override// void stop() {// // TODO Auto-generated method stub// super.stop();// }public static void main(String[] args) {}}cs 'JAVA' 카테고리의 다른 글
인터페이스, 내부클래스, 예외 (0) 2021.07.23 상속, instanceof, 추상, interface (0) 2021.07.22 메서드,싱글톤,static,상수 (0) 2021.07.22 static main, 접근제한자, 싱글톤정의 (0) 2021.07.22 java 및 객체의 정의 (0) 2021.07.22