자바(Java) - 인터페이스(Interface) 개념과 예제

안녕하세요

이번 시간에는 저번 시간 자바의 final에 이어서

인터페이스(Interface) 개념과 예제를 올려봅니다.

자바에서 인터페이스는 모든 메소드가 추상메소드이고, 모든 속성이 상수(final 변수)로 구성된 틀  : 멤버가 추상메소드+ 상수로만 구성된 것을 말합니다.

 - 인터페이스를 상속받을 때는 implements 란 키워드를 사용합니다.
 - 인터페이스는 다중 상속이 가능합니다.

인터페이스 구현방법은 아래와 같습니다.
interface MyInter{
   void sub();
   // 추상메소드 -- public과 abstract를 생략해도 자동으로 붙는다.
}

또한 인터페이스를 상속받으려면 반드시 추상메소드를 오버라이딩 해야합니다.

class MyClass implements MyInter{
   public void sub(){
      System.out.println("Sub()");
   }
}

개념은 여기까지 설명하고 아래 실제 예제를 올려봅니다.


interface Inter1{
 String bar();
}
interface Inter2{
 void baz();
}
interface Inter3 extends Inter1, Inter2{
 int ADD=1;
 int DELETE=2;
}
//interface는 자동으로 abstract가 붙지만 추상클래스는 수동으로 입력해줘야함
abstract class AbsClass{
 abstract void foo();
 public void print(){
  System.out.println("AbsClass");
 }
}
/*[실습] Inter3, AbsClass를 상속받은 뒤
 * 에러나지 않도록 메소드를 오버라이드 하세요
 * */
class MyClass2 extends AbsClass implements Inter3{
 
 @Override
 public void foo(){
  System.out.println("foo()");
 }
 @Override
 public void print(){
  System.out.println("MyClass2");
 }
 @Override
 public String bar(){
  return "리턴";
 
 @Override
 public void baz(){
  System.out.println("baz()");
 }
}
public class InterfaceTest2{
 public static void main(String[] args) {
  MyClass2 m1 = new MyClass2();
  m1.foo();
  m1.print();
  System.out.println(m1.bar());
  m1.baz();
  System.out.println(Inter3.ADD);
  System.out.println(m1.DELETE)
  //AbsClass타입으로 선언 MyClass2 객체 생성;
  AbsClass a1 = new MyClass2();
  a1.foo();
  a1.print();
  //a1.bar;[x]
  //Inter3타입으로 선언 MyClass2 객체 생성
  Inter3 a2 = new MyClass2();
  System.out.println(a2.bar());
  a2.baz();
  System.out.println(Inter3.ADD);
  System.out.println(a2.DELETE);
 }
}

자바(Java) - final 지정자란? 개념과 예제 포함~!

안녕하세요

이번 시간에는 자바에서 fianl 지정자에 대해 글을 써봅니다.

우선 final 지정자는 abstract와 반대 개념으로 생각하시면 됩니다.


크게 어려운 개념은 아니라서 

바로 예제로 들어갑니다.



/*[1]final + class : 상속을 못받게 함
 *[2]final + method : 오버라이딩을 못하게 함 
 *[3]final + 변수 : 값 할당을 못하게 상수로 만든다. 
 * 
 * */
final class Super{
 void foo(){
  System.out.println("Super's foo()");
 }
}
class Sub{ // extends Super(){ [x] class 앞에 final이 붙으면 상속 불가
 
 void bar(){
  System.out.println("bar###");
 }
 final void baz(){
  System.out.println("baz@@@");
 }
}
class SubSub extends Sub{
 
 int x=10; // 인스턴스 변수
 final int y=20; // final인 인스턴스 변수
 public static final int z=30; // final인 클래스 변수
 @Override
 protected void bar(){
  System.out.println("bar!!!!!");
 }
 /*protected void baz(){ [x] 재정의 불가. final메소드이므로
  System.out.println("baz%%%%%");
 }*/
}
public class FinalTest {
 public static void main(String[] args) {
  
  //SubSub의 x,y,z 값을 출력하기
  SubSub d = new SubSub();
  System.out.println("d.x : " + d.x);
  System.out.println("d.y : " + d.y);
  System.out.println("d.z : " + d.z);
  System.out.println("SubSub.z : " + SubSub.z);
  System.out.println("--값 변경--------");
  
  d.x=50;
  System.out.println("d.x : " + d.x);
  
  //final이 붙은 변수는 값 변경이 불가
  /*d.y=60;
  SubSub.z=90;*/
 }
}

자바(Java) - BorderLayout과 GridLayout을 활용한 예제

안녕하세요

이번 시간에는 자바 애플릿에서 BorderLayout과 GridLayout을 활용한 예제를 올려봅니다.

일단 결과 사진을 보여주면 아래와 같습니다.


보기에는 단순해보이지만, 생각해보다 머리를 쓰면서 구현을 해야 저 그림이 나옵니다.

먼저 BorderyLayout을 기반으로 하여

패널(Panel)울 두 개 생성하여 중앙, 남쪽에 배치하고

그 각각의 패널에 버튼을 붙입니다.

자 그럼 아래 소스 코드를 보시죠~


public class LayoutTest extends Applet {
 
 Button y1,y2,y3,y4;
 Button pp1,pp2;
 Panel p1,p2; // 부모 패널 변수
 
 @Override
 public void init(){
 //애플릿 전체의 레이아웃 설정
 BorderLayout b = new BorderLayout();
 setSize(400,400);
 setLayout(b);
 // 패널 1,2를 생성해서 부착
 p1 = new MyPanel(); // 자식의 메소드를 오버라이드(상속 받아서 내가 필요한것만 재정의) 10,10,10,10로 여백 지정
 p2 = new MyPanel(20,10,20,10); // MyPanel 클래스의 매개변수 4개 받는 생성자로 이동
 add(p1, "Center");
 add(p2, "South");
 p1.setBackground(Color.YELLOW);
 p1.setBackground(Color.PINK);
 y1=new Button("버튼1");
 y2=new Button("버튼2");
 y3=new Button("버튼3");
 y4=new Button("버튼4");
 p1.setLayout(new GridLayout(2,2,10,10));
 p1.add(y1);p1.add(y2);
 p1.add(y3);p1.add(y4);
 pp1=new Button("버튼1");
 pp2=new Button("버튼2");
 p2.setLayout(new GridLayout(2,1,10,10));
 p2.add(pp1);
 p2.add(pp2);
}
 

아래의 소스는 제가 재정의한 MyPanel 클래스입니다.

저 클래스는 애플릿의 안쪽 여백을 지정했습니다.


public class MyPanel extends Panel{
 int a,b,c,d;
 public MyPanel(){ // 기본 생성자
  this(10,10,10,10);
 }
 // 생성자 오버로드
 public MyPanel(int a, int b, int c, int d){
  this.a=a;
  this.b=b;
  this.c=c;
  this.d=d;
 }
 @Override
 public Insets getInsets(){
  return new Insets(a,b,c,d);
 }
}

자바(Java) - 추상클래스(abstract class)에 대해 알아보자

안녕하세요

이번 시간에는 자바에서 '추상 클래스'에 대한 개념을 알아보는 시간을 가지겠습니다.

추상클래스란 한개 이상의 추상 메소드를 가지는 클래스를 말합니다.

추상메소드(abstract method)란?

메소드 몸체(body)없이 선언만 하는 것으로..
이 때 메소드 앞에 abstract 란 modifier를 붙여 줍니다.
ex) abstract public void sub();

추상클래스에서 좀 더 유의해야 할 사항이 있다면 아래와 같습니다.

추상 클래스를 상속받은 클래스에서는 추상 메소드를 강제적으로 오버라이딩해야 합니다. 그렇지 않을 경우 그 자식 클래스도 추상 클래스가 되어야 합니다

추상 클래스는 타입선언은 할 수 있으나 new 해서 객체 생성은 할 수 없으며, 반드시 상속을 통해서만 완성됩니다.

자 이론은 여기까지 하고 실제 구현 예를 봅시다.

abstract public class Animal{
 abstract public void crySound();
 abstract public String getBaby(int num);
}
class Dog extends Animal{
 public void crySound(){
  System.out.println("@@ 개 짖는 소리 @@");
  System.out.println("멍멍~~");
 }
 public String getBaby(int x){
  String str="";
  str=x+"마리의 새끼를 낳았어요";
  return str;
 }
}
class Cat extends Animal{
 public void crySound(){
  System.out.println("@@ 고양이 우는 소리 @@");
  System.out.println("야옹~~");
 }
 public String getBaby(int x){
  String str="";
  str=x+"마리의 새끼를 낳았어요";
  return str;
 }
}

위의 소스는 추상화 클래스에서 두 개의 추상 메소드를 구현하고

개, 고양이 클래스에서 추상 메소드를 사용한 예제입니다.

아래의 소스는 자바의 swing을 활용하여 응용한 예제입니다.


public class T_AnimalTest {
 public static void main(String[] args) {
  String type=JOptionPane.showInputDialog("동물 유형을 입력하세요");
  String strNum=JOptionPane.showInputDialog("마리수를 입력하세요");
  
  int num = Integer.parseInt(strNum);
  Animal d = null; // 부모타입 Animal d 선언
  if(type.equals("개")){ // 문자열 내용 비교
   d = new Dog();
  }else if(type.equals("고양이")){
   d= new Cat();
  }else{
   System.out.println("그런 동물 안키워~~");
   return; // 밑의 소스로 안내려감, return에서 끝나버림
  }
  
  d.crySound();
  String s = d.getBaby(num);
  System.out.println(s);
 }
}

자바스크립트 - Window 객체 함수(setTimeout, setInterval)를 활용해보자

안녕하세요

이번 시간에는 자바스크립트에서

Window 객체 함수(setTimeout, setInterval)를 활용하여 재밌는 이벤트들을 만들까 합니다

실제로도 많이 쓰이니 잘 활용하시면 좋을것 같습니답~! ㅎㅎ

먼저 결과 예시 화면을 보자면 아래와 같습니다.


3초 뒤라는 버튼을 누르면 3초 뒤에 '꽝' 이라는 메시지가 나옵니다.

옆에 3초 마다 버튼을 누르면 '꽝' 이라는 메시지가 3초마다 나오고

중지를 누르면 안나오게 됩니다.


밑에 현재 시간 버튼을 누르면 현재 시간이 나옵니다.

그리고 시계 동작을 누르면 1초 마다 시간이 움직이고

멈춤 버튼을 누르면 시계 동작이 스톱됩니다.

아래에 예제 소스가 있으니 참고하십시요~
<script type="text/javascript">
var go=function(){
window.alert("꽝!");
}
function showTime(){
//현재 시간 구하기=>Date 객체 활용
var today = new Date();
var str="";
str+=today.getHours()+"시 ";
str+=today.getMinutes()+"분 ";
str+=today.getSeconds()+"초 ";
//아이디가 msg인 곳에 현재 시간정보를 출력
var obj=document.getElementById('msg');
obj.innerHTML="<h2 style='color:blue'>"+str+"</h2>";
}
</script>
<body>
<button onclick="obj1=window.setTimeout(go,3000)">3초 뒤
(setTimeout)</button>
<!--
변수1=window.setTimeout(함수명,숫자); // 특정 시간 경과 뒤 한번 함수를 호출함
window.clearTimeout(변수1)
변수2=window.setInterval(함수명,숫자); // 주기적으로 함수를 호출함
window.clearInterval(변수2);
-->
<button onclick="obj2=window.setInterval(go,3000)">3초 마다
(setInterval)</button>
<button onclick="window.clearInterval(obj2)">중지
(clearInterval)</button>
<button onclick="showTime()">현재 시간</button>
<button onclick="timer=setInterval(showTime, 1000)">시계 동작</button>
<button onclick="clearInterval(timer)">시계 멈춤</button>
<hr color="red">
<p></p>
<div id="msg"></div>

자바스크립트 - 브라우저 내장객체(Window객체) 활용

안녕하세요

이번 시간에는 자바스크립트에서 BOM(Browser Object Model) 이라고 하여 웹브라우저 윈도우를 관리할 목적으로 제공되는 객체 모음에 대해 글을 써봅니다.

BOM에는 계층이 있는데 계층도는 아래와 같습니다.



제가 알아볼 객체는 5가지 입니다.

window: 최상위 객체

navigator: 브라우저 이름, 버전 정보를 보관하는 객체

document: 현재 문서에 대한 정보를 보관하는 객체

location: 현재 보여지는 웹페이지의 url정보를 보관하는 객체

history: 현재 브라우저가 접근했던 url정보를 보관하는 객체

이번 시간에는 window 객체의 활용법을 다룬 소스코드를 올려봅니다.

먼저 결과 화면을 보여주면 아래와 같습니다


버튼은 4개가 있습니다.

먼저 팝업창을 열면 아래와 같은 화면이 나옵니다.

물론 아래의 화면은 제가 예시로 짠 화면이고, 링크를 걸어둘 화면을 

간단하게 구현하시면 됩니다.



창이 열리면 팝업창 닫기 버튼을 눌러서 닫을수 있고,

위치도 지정된 위치로 변경할 수 있습니다.

아래의 사진은 화면이 좀 더 커진 모습입니다.

자 그럼 이제 소스를 보시죠~




<script type="text/javascript">
var win=null; // 전역변수
var openWin=function(){
var url="가야할 주소.html";
//변수선언=window.open(url, '창이름', '속성들');
win=window.open(url, "팝업창", "width=400, height=400, left=100, top=100,
resizable=yes, scrollbars=no, menubar=yes, toolbar=yes, location=yes");
}
var closeWin=function(){
//window 객체의 close() 함수
if(win!=null){
win.close();
win=null;
}
}
</script>
<button onclick="openWin()"> 팝업창 열기 </button>
<button onclick="openWin()"> 팝업창 열기 </button>
<button onclick="win.moveTo(300,300)">팝업창 위치 변경</button>
<button onclick="win.resizeTo(700,700);win.focus()">팝업창 크기 변경 </button>

자바(Java) 애플릿 - BorderLayout 예제

안녕하세요

이번 시간에는 자바 애플릿에서 자주 쓰이는

BorderLayout 예제 올려봅니다.

이것도 마찬가지로 사용법이 간단합니다.

결과 화면은 아래와 같습니다



보시다시피 버튼이 5개이고,

각 버튼이 동,서,남,북,중앙으로 배치되어있습니다.

대충 어떤 코드가 나올지 예상되시죠? ㅎㅎ




import java.applet.Applet;
import java.awt.*;

public class MyBorederlayout extends Applet{
	Button b1,b2,b3,b4,b5;
	/*BorderLayout은 동,서,나무,북,중앙의 경계지역을
	 * 지정해 배치하는 방식
	 * */
	
	@Override
	public void init(){
		setSize(400,400);
		BorderLayout b_1= new BorderLayout(10, 20); // 버튼들의 간격 지정
		setLayout(b_1);
		
		b1=new Button("b1");
		b2=new Button("b2");
		b3=new Button("b3");
		b4=new Button("b4");
		b5=new Button("b5");
		//add 할 때 영역을 지정해야 함
		add(b1,"North"); // add(b1,BorderLayout.NORTH);
		add(b2,"South");
		add(b3,"East");
		add(b4,"West");
		add(b5,"Center");
		//영역을 지정하지 않고 붙이면 디폴트 센터에 붙는다.
	} //init------------------
	
	//public Insets getInsets(): 컨테이너의 바깥여백을 주고자 할 때 오버라이드(재정의해 사용)
	@Override
	public Insets getInsets(){ // Insets : 반환형
		//Insets(int top, int left, int bottom, int right) 
		Insets in = new Insets(10,20,30,40);
		return in;
	}
	
}

자바(Java) 애플릿 - FlowLayout 예제

안녕하세요 이번 시간에는 자바 애플릿에서 쓰이는 레이아웃의 종류와

그 중에서 FlowLayout 활용 예를 보여드리겠습니다.

Layout은 아래와 같이 5개가 많이 사용됩니다.

 * [1] FlowLayout
 * [2] BorderLayout
 * [3] GridLayout
 * [4] GridBagLayout
 * [5] CardLayout

아래는 FlowLayout 결과 화면입니다.

생각보다 평범하죠? ㅋ


레이아웃을 사용한 예라 간단합니다.

컴포넌트로는 버튼 5개를 넣었습니다.


import java.applet.Applet;
import java.awt.*;

public class MyFlowlayout extends Applet {
	//애플릿(Panel 계열) 기본 레이아웃 : FlowLayout
	Button b1, b2, b3, b4, b5;
	
	@Override
	public void init(){
		//setLayout(new BorderLayout()); //레이아웃 설정
		FlowLayout  f1 = new FlowLayout(FlowLayout.LEFT, 20, 40); // 수평간격(hgap) : 20, 수직간격(vgap) : 40
		setLayout(f1);
		
		setSize(400,400);
		b1 = new Button("B1");
		b2 = new Button("B2");
		b3 = new Button("B3");
		b4 = new Button("B4");
		b5 = new Button("B5");
		
		add(b1);add(b2);add(b3);
		add(b4);add(b5);
		
	}
}

자바(Java) - 애플릿 간단 예제(Choice, List, Scrollbar)

안녕하세요

이번 시간에는 저번 포스팅에 이어 애플릿 간단 예제 올려봅니다.

간단한 활용법이니 머리 식힐겸 보시면 됩니다.

일단 결과 화면은 아래와 같습니다.


자 그럼 소스코드를 보시죠~



import java.applet.Applet;
import java.awt.*;

public class MyGui2 extends Applet {
	
	Choice ch;
	List lst1, lst2;
	Scrollbar sr1, sr2;
	
	public void init(){
		//init()안에서 레이아웃 설정 및 컴포넌트 객체 생성
		//부착을 한다
		setSize(400,400);
		ch = new Choice();
		add(ch);
		ch.add("Java"); // 인덱스:0
		ch.add("HTML5"); // 1
		ch.add("CSS3.0"); // 2
		ch.add("JavaScript");
		
		System.out.println(ch.getItem(2));	
		
		lst1 = new List(5); // 단일 선택 목록
		add(lst1);
		lst1.add("JSP");
		lst1.add("Oracle");
		lst1.add("Spring");
		System.out.println(lst1.getItem(2));
		
		lst2 = new List(4, true); // 리스트에서 다중 선택 가능
		add(lst2);
		lst2.add("유비");
		lst2.add("관우");
		lst2.add("장비");
		lst2.add("조운");
		
		sr1 = new Scrollbar(sr1.VERTICAL );
		add(sr1);
		
		//Scrollbar(int orientation, int value, int visible, int minimum, int maximum) 
		sr2 = new Scrollbar(sr1.HORIZONTAL ,50,10,0,255+10); // 초기값, 바의폭, 최소값, 최대값
		
		add(sr2);
		
	}
}

자바(Java) - 애플릿 간단 예제(Button, Label, TextField, TextArea, Checkbox)

안녕하세요 이번 시간에는 자바에서

api를 잘 쓰고 불러오는 데 유용한 애플릿 예제를 올려봅니다.

애플릿을 처음 해보는데 그렇게 어렵지 않네요.

결과 화면은 아래와 같습니다.


조금 조잡하죠? ㅋ 

아직 레이아웃을 설정하지 않고 간단하게 사용하는거라 UI는 신경쓰지 않았습니다 ㅋ

이번 시간에는 그냥 사용하는 걸로 해봅시다~!





import java.awt.*;
import java.applet.*;
public class MyGui extends Applet{
	Button b1, b2, b3;
	Label lb1, lb2, lb3;
	TextField tf1, tf2, tf3;
	TextArea ta1, ta2;
	Checkbox c1, c2, c3, cm, cf;
	// Button is a Component
	// Applet is a Contianer
	// -> 애플릿이라는 컨테이너에 버튼이라는 컴포넌트를 부착!
	public void init(){ // 생성자 역할을 함=>멤버변수 초기화
	// 객체가 생성될 때 딱 한번만 호출됨
		setSize(400,400);
		b1 = new Button("Home");
		b2=new Button("로그인");
		b3=new Button("회원가입");
		
		//컴포넌트를 컨테이너에 부착해야 나옴
		this.add(b1); // this 빼도 됨
		add(b2);
		add(b3);
		//버튼의 배경색 주기
		b1.setBackground(Color.green);
		b2.setBackground(Color.CYAN);
		b3.setBackground(Color.WHITE);
		//버튼의 글자색 주기
		b1.setForeground(Color.black);
		b2.setForeground(Color.PINK);
		b3.setForeground(Color.orange);
		//애플릿의 배경색을 lightGray로 주세요
		setBackground(Color.lightGray);
		lb1=new Label(" 이름 : "); // 디폴트 : 왼쪽정렬
		lb2=new Label("  키  : ", Label.RIGHT); // 중앙정렬
		lb3=new Label("초능력: ", Label.CENTER); // 오른쪽 정렬
		add(lb1);
		add(lb2);
		add(lb3);
		lb1.setBackground(Color.white);
		lb2.setBackground(Color.yellow);
		lb3.setBackground(Color.blue);
		tf1=new TextField(10);
		tf2=new TextField("호랑이사자치타");
		tf3=new TextField("여우고래상어", 20);
		add(tf1);
		add(tf2);
		add(tf3);
		ta1=new TextArea("안녕하세요, 호날두입니다", 10, 20);
		add(ta1);
		ta2=new TextArea("까꿍", 5, 5, TextArea.SCROLLBARS_VERTICAL_ONLY);
		add(ta2);
		
		c1=new Checkbox("선택해주세요");
		c2=new Checkbox("등산", true);
		c3=new Checkbox("운동", false);
		add(c1);
		add(c2);
		add(c3);
		//awt 패키지에는 라디오 버튼이 없기 때문에 이것을 사용하려면 Checkbox를 그룹지어야 함
		CheckboxGroup gr = new CheckboxGroup();
		cm=new Checkbox("남자",true,gr);
		cf=new Checkbox("여자",false,gr);
		add(cm);
		add(cf);
	}
}
		
	
		
		
		

자바(Java) - 오버라이딩이란??

안녕하세요

이번 시간에는 자바에서 역시나 중요한 개념 중 하나인 오버라이딩(Overriding)에 대해서

글을 써봅니다.


오버라이딩은 메소드 재정의로, 부모의 메소드를 자식 클래스에서 다시 정의하여 구성하는 것입니다.

오버라이딩에는 5가지의 규칙이 있습니다.

1) 부모의 메소드와 이름을 동일하게
2) 매개변수의 자료형, 갯수, 순서 모두 동일하게
3) 반환타입도 부모의 것과 동일하게
4) 접근지정자는 부모의 것과 동일하거나 더 넓은 범위의 지정자 사용이 가능하다
5) Exception의 경우 부모 클래스의 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 한다.  (대신 메소드 바디는 부모와 다르게 구성)

아래에 오버라이딩 예제를 올려봅니다.

public class Human{
	String name;
	int height;
	
	public Human(String name, int height){
		this.name=name;
		this.height=height;
	}
	public void showInfo(){
		System.out.println("이름 : "+name);
		System.out.println("키 : "+height);
	}
}
class Superman extenhds Human{
	int power;
	public Superman(){
		super("슈퍼맨", 170); // super 명령어를 사용하여 부모 Human 클래스를 호출함
	}
	public Superman(String name, int height, int power){
		super(name, height);
		this.power=power; // power는 Superman 클래스에서 설정
	}
	//오버라이드
	@Override
	public void showInfo(){
		super.showInfo();
		System.out.println("초 능 력 : "+ power);
	}
	//오버로드
	public void showInfo(String title){
		System.out.println(title);
		this.showInfo(); // 위의 showInfo() 메소드로 이동
	}
	public String showInfo(String title, int pw){
		String str="";
		this.showInfo(title); // 위의 showInfo(String title) 메소드로 이동
		power+=pw;
		str+=">>>초능력 UP>>"+power+"<<<\n";
		return str;
	}
}

아래 소스는 Overriding이라는 메인 클래스에서 위의 Human, Superman 클래스를 불러온 소스 코드입니다.

부모와 자식의 상속관계를 맺을 경우, 객체를 생성할 때

------------------------------------------------------
부모타입의 변수선언 = new  자식객체생성자();
------------------------------------------------------
가능합니다.

하지만 자식의 고유한 변수나 메소드는 접근할 수 없습니다.

또 자식클래스에 오버라이드한 메소드가 있을 때는

자신의 클래스보다 오버라이드한 자식의 메소드를 우선 호출하니 주의 바랍니답


public class Overriding {
	public static void main(String[] args) {
		Human h1 = new Human("홍길동", 160);
		Superman s1 = new Superman("리차드", 170, 220);
		h1.showInfo();
		s1.showInfo();
		
		s1.showInfo("##슈퍼맨 정보");
		String info = s1.showInfo("-- 슈퍼맨 정보 --", 300);
		System.out.println(info);
		Human hs = new Superman("토마스", 180, 300);
		System.out.println("hs.name="+hs.name);
		System.out.println("hs.height="+hs.height);
		hs.showInfo(); // human 타입이라도 Override 된 메소드를 우선
		
		// 강제 형변환도 가능, .의 우선순위가 높기 때문에 괄호로 처리하여 먼저 형변환
		((Superman) hs).showInfo("$$슈퍼맨 정보$$");
		// Human 타입의 배열을 생성하여 저장, for루프를 이용하여 출력
		Human[] h_arr = {h1, s1, a1, hs, ha};
		/* 참조변수 instanceof 클래스명
		   참조변수가 클래스의 객체면 true를 반환, 아니면 false를 반환
		*/
                // for문을 돌려야 하는데 에러가 나서 위에 간단히 구현하세요~
		// h_arr[i]가 Superman 객체이면..
			if(h_arr[i] instanceof Superman){
				((Superman)h_arr[i]).showInfo("####슈퍼맨####");
			}else if(h_arr[i] instanceof Aquaman){// Aquaman 객체면..
				((Aquaman)h_arr[i]).showInfo("~~~~~아쿠아맨~~~~~~");
			}else{
				System.out.println("----------");
				h_arr[i].showInfo();
			}
		}
	}
}

나루티밋 스톰 4 Road to BORUTO 트레일러

안녕하세요



이번 시간에는  나루티밋 스톰 4 Road to BORUTO 트레일러를 올려봅니다.

이번 시리즈 같은 경우는..

보루토 세대의 인물들과 나뭇잎 마을이 배경으로 등장하며, 스토리는 보루토가 나온 극장판을 충실히 재현하고 있어서 보루토 세대의 플레이어블 캐릭터들이 등장한다고 하네요

 
 
 
 
 

아비를 패는 우즈마키 보루토 ㅋㅋ


 
 

역시 나루토에 빠질 수 없는 우치하 캐릭터들도 어떻게 나올지 기대되네요.




루피(Luffy) vs 알비다(Alvida)

안녕하세요

이번 시간에는 루피의 첫 일기토~!

]

루피와 알비다의 싸움을 올려봅니다.

원피스의 시작을 알리는 싸움이기도 하면서 동시에 루피의 괴상망칙한 능력이 나오는 순간이죠



루피한테 개털린 알비다는.. 그때부터 루피를 좋아하기 시작하죠 ㅋ

알비다, 핸콕, 나미 등 루피를 좋아하는 여자들이 많네요.

전생에 나라를 세 번 구한듯 합니다 ㅋㅋ