일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- nodejs
- 포도주시식
- 크롬 익스텐션
- content script
- 크롬 확장자
- 공부시간측정어플
- 디스코드 봇
- X
- react
- discord.js
- 백준 7579
- 2156
- C언어로 쉽게 풀어쓴 자료구조
- 자료구조
- popup
- 동적계획법
- supabase
- background script
- Chrome Extension
- Message Passing
- 파이썬
- webpack
- TypeScript
- 갓생
- 캠스터디
- 백준 #7568번 #파이썬 #동적계획법
- 프로그래머스 #정수삼각형 #동적계획법
- 백준
- Today
- Total
히치키치
[명품 자바 에센셜] 실습문제 5장 본문
요약
슈퍼클래스 멤버 접근
public
: 모두 접근 가능protected
: 같은 패키지 내 + 패키지 무관, 상속되는 서브클래스디폴트
: 같은 패키지 내private
: 접근 불가능슈퍼/서브 클래스 생성자 호출과 실행
서브 생성자 호출
->슈퍼 생성자 호출
->슈퍼 생성자 실행
->서브 생성자 실행
슈퍼/서브 생성자 결정 방식 (P.200)
super(인자)
이용해 서브 클래스 개발자가슈퍼 클래스 생성자
를 명시적 선택컴파일러
가 자동으로슈퍼 클래스 생성자
묵시적 선택upcasting
: 서브 클래스 객체 -> 슈퍼 클래스 객체
슈퍼 클래스 멤버만 접근 가능
(사라지는 것 X 다시downcasting
하면 다시 접근 가능)instanceof
: 객체의 서브 클래스와 슈퍼 클래스 타입 검사, 객체에만 가능동적바인딩
: 실행 메소드를컴파일
시가 아니라실행(runtime)
때 결정메소드가
오버라이딩
됨 (P.214)by
동적 바인딩
,서브 클래스
의오버라이딩란 메소드
호출됨super
:슈퍼클래스
에 대한 레퍼런스
super 키워드로정적 바인딩
하여슈퍼 클래스
멤버 접근메소드 오버로딩
: 동일 클래스/상속 관계 :정적 바인딩
메소드중복 선언
하여 상황에 따라다양하게 사용
동일 : 메소드 이름
차이 : 메소드 인자갯수
/타입
메소드 오버라이딩
: 상속 관계 :동적 바인딩
슈퍼 클래스의 메소드는무시
, 서브 클래스에서재정의
동일 : 메소드이름
,인자
,갯수
,리턴 타입
추상 메소드
:abstract
키워드와 함수 원형만 선언 :다형성 실현
함수 원형 :리턴타입 이름 () ;
->{ }
들어가면 함수 원형 아님추상 클래스
만이추상 메소드
가짐, 인스턴스 생성 불가추상 클래스
상속 -> 서브클래스도추상 클래스
추상 클래스 구현
:
서브 클래스에서 상속 받은 모든 추상 메소드 오버 라이딩함 ->정상 클래스
됨인터페이스
:implements
: 객체 생성 불가능, 레퍼런스 변수 선언 가능, 다중 상속 가능1번
class Circle{ private int radius; public Circle(int radius) {this.radius=radius;} public int getRadius() {return radius; }
}
public class NamedCircle extends Circle{
private String name;
public NamedCircle(int radius, String name) {
super(radius);
this.name=name;
}
public void show() {
System.out.println(name+", 반지름 = "+getRadius());
}
public static void main(String[] args) {
NamedCircle w= new NamedCircle(5, "Waffle");
w.show();
}
}
# 2번
interface AdderInterface{
int add(int x, int y);//x와 y의 합 리턴
int add(int n);//1에서 n까지의 정수 합 리턴. n은 0보다 큰 수 가정
}
public class MyAdder implements AdderInterface{
public int add(int x, int y) {
return x+y;
}
public int add(int x) {
int sum=0;
for(int i=1;i<=x;i++) {
sum+=i;
}
return sum;
}
public static void main(String[] args) {
MyAdder adder=new MyAdder();
System.out.println(adder.add(5,10));
System.out.println(adder.add(10));
}
}
# 3번
import java.util.Scanner;
abstract class Calculator{
protected int a,b;
abstract protected int calc();//추상 매소드
protected void input() {//두 정수를 입력받는 메소드
Scanner scanner=new Scanner(System.in);
System.out.print("정수 2개를 입력하시오>>");
a=scanner.nextInt();
b=scanner.nextInt();
}
public void run() {//두 정수를 입력받아 계산하고 결과를 출력하는 메소드
input();
int res=calc();
System.out.println("계산된 값은 "+res);
}
}
//Adder와 Subtracter 클래스 작성
class Adder extends Calculator{
protected int calc() {
return this.a+this.b;
}
}
class Subtracter extends Calculator{
protected int calc() {
return this.a-this.b;
}
}
public class App {
public static void main(String[] args) {
Adder adder=new Adder();
Subtracter sub= new Subtracter();
adder.run();
sub.run();
}
}
# 4번
class Point{
private int x,y;
public Point (int x, int y) {this.x=x; this.y=y;}
public int getX() {return x;}
public int getY() {return y;}
protected void move(int x, int y) {this.x=x; this.y=y; }
}
public class ColorPoint extends Point{
String color;
public ColorPoint(int x, int y, String color){
super(x,y);
this.color=color;
}
public void setPoint(int x, int y) {
super.move(x,y);//슈퍼 클래스의 move 메소드 사용
}
public void setColor(String color) {
this.color=color;
}
public void show() {
System.out.println(color+"색으로("+getX()+","+getY()+")");
}
public static void main(String[] args) {
ColorPoint cp=new ColorPoint(5,5,"Yellow");
cp.setPoint(10,20);
cp.setColor("GREEN");
cp.show();
}
}
# 5번
import java.util.Scanner;
interface StackInterface{
int length();
String pop();
boolean push(String ob);
}
class StringStack implements StackInterface{
String stack[]=new String[5];
private int cnt=0; //zero indexing
public int length() {
return cnt+1; //갯수니까 0이 아니라 1부터 시작
}
public String pop() {
return stack[--cnt]; //다섯 단어 다 입력되면 cnt=5인데 index는 0~4d임으로 cnt 1 감소해서 4로 만들고 시작
}
public boolean push(String ob) {
if(cnt==5) {return false;}
else {
stack[cnt]=ob; //0부터 index 시작
cnt++; //index 하나 증가해서 다음 칸으로 넘겨
return true;
}
}
}
public class StackManger {
public static void main(String[] args) {
StringStack stringstack=new StringStack();
Scanner scanner=new Scanner(System.in);
for(int i=0;i<5;i++) {
stringstack.push(scanner.next());
}
for(int i=0;i<5;i++) {
System.out.print(stringstack.pop()+" ");
}
}
}
# 6번
package java_5;
import java.util.Scanner;
abstract class shape{
abstract void draw();
}
class Editor extends shape{
static int i=0;
private String shape[]=new String[10];
Scanner scanner=new Scanner(System.in);
public void insert() {
System.out.print("도형 종류 Line(1), Rect(2), Circle(3)>>");
int choice=scanner.nextInt();
switch(choice) {
case 1:
shape[i++]="Line";
break;
case 2:
shape[i++]="Rect";
break;
case 3:
shape[i++]="Circle";
break;
default:
System.out.print("잘못된 입력입니다.");
}
}
public void remove() {
System.out.print("삭제할 도형의 위치>>");
int idx=scanner.nextInt();
if (idx<=i) {shape[idx--]=null;}
else System.out.println("삭제할 수 없습니다.");
}
public void draw() {
for(int k=0;k<i;k++) {
//배열의 길이까지 출력하도록 설정하면 10개 다 안 찼을 떼 이상하게 출력됨
//도형이 입력된 i까지 출력되도록 ...
System.out.println(shape[k]);
}
}
}
public class GraphicEdit {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
Editor editor=new Editor();
while(true) {
System.out.print("삽입(1), 삭제(2), 모두 보기(3), 종료(4)>>");
int choice=scanner.nextInt();
switch(choice) {
case 1:
editor.insert();
break;
case 2:
editor.remove();
break;
case 3:
editor.draw();
break;
case 4:
System.out.print("프로그램을 종료합니다...");
System.exit(0);
default:
System.out.print("잘못된 입력입니다.");
}
}
}
}
# Bonus 1
package java_5;
interface Shape{
final double PI=3.14;
void draw();
double getArea();
default public void redraw() {
System.out.println("--- 다시 그립니다. ---");
draw();
}
}
class Circle implements Shape{
private int radius;
public Circle(int radius) {
this.radius=radius;
}
public void draw() {
System.out.print("반지음 "+radius+" ");
}
public double getArea() {
return PIradiusradius;
}
}
public class ShapeApp {
public static void main(String[] args) {
Shape coin=new Circle(10);//반지름이 10인 코인 객체 생성
coin.redraw(); //코인 다시 그리기
System.out.println("코인의 면적은 "+coin.getArea());
}
}
```
'명품 자바 에센셜' 카테고리의 다른 글
[명품 자바 에센셜] 실습문제 8장 (0) | 2021.09.01 |
---|---|
[명품 자바 에센셜] 실습문제 7장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 6장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 3장 (0) | 2021.04.12 |
[명품 자바 에센셜] 실습문제 2장 (0) | 2021.04.12 |