이유는 개체를 캐스팅 할 수 있습니까? 그것은 다른 개체와 함께 할 수 있습니까?

ErlichBachman :

내가 작성되었다 그래서 paintComponent(Graphics g)방법을하고 나는 그것을 캐스팅 오전 시작 부분에 깨달았다 Graphics2D g2 = (Graphics2D) g;. 나는 얼마 전에이 코드 a를 쓰고 그냥이 무엇인지 단서가 없다 깨달았다. 나는 조금 봤하지만 객체 주조는 나에게 약간의 외국인이다.

하나의 객체 참조가 다른 개체 참조로 캐스트 할 수 있습니다. 이는 객체를 캐스팅이라고합니다.

Y. 다니엘 리앙하여 내 교과서에서 단어 ^^ 말씀

이 작품 이유를 이해하지 않습니다. Graphics그리고 Graphics2D그들은 서로-서로 인스턴스 변수와 메소드를 상속 할 수있는 방법이 다른 개체는 무엇입니까? 분명히 나는 확대 및 축소, 즉 원시 주조 알고있다. 그들이 바이트 등 정수, 더블, 단지 래퍼 클래스이기 때문에 그 의미가 있습니다 ...

dfritsi :

어떤 종류의 객체 변환 또는 변환을 캐스팅하지으로 일어나고있다. 다만 다음과 같은 클래스 구조를 가지고 상상 :

class Mammal { }
class Human extends Mammal { }
class Dog extends Mammal { }

당신이 인간의 새로운 인스턴스를 만들 때 이제 Human human = new Human();그 마우스 오른쪽 포유 동물 될 것인가? 그래서 당신은 같은 방법을 쓸 수있다 :

public void doSoemthing(Mammal mammal) {
    if (mammal instanceof Human) {
        Human human = (Human) mammal;
        human.doWork();
    } else if (mammal instanceof Dog) {
        Dog dog = (Dog) mammal;
        dog.bark();
    }
}

및 방법을 같이 호출 :

doSomething(new Human());

당신의 방법은 입력 매개 변수로 당신의 방식으로 포유류의 모든 유형을 취할 수 있도록 종류의 포유 동물의 정말 무엇을 확인할 수 있습니다. 당신이를 통과 할 때 그래서 new Human()입력으로, 객체의 실제의 형태는 인간이 될 것입니다. 당신이 포유류를 기대하는 방법으로 인체를 통과 할 수 있기 때문에 그 이유는 상속하기 때문이다. 그래서 당신의 방법을 알 수하면 입력 매개 변수가 확실히 포유류 것입니다. 그러나 포유류의 종류가 될 수 있습니다. 당신이 알고 싶은 경우 개체의 실제 유형은 당신이 사용할 수있는 것입니다 instanceof예를 들어. 그리고이 줄 :

Human human = (Human) mammal;

당신은 포유 동물의 입력 매개 변수를 변환하는 것을 의미하지 않는다. 그것은 당신에 지금부터가 인간으로 입력 매개 변수를 사용하려는 것을 의미한다. 당신이 정말 인간 있는지 확인 isntanceof 그리고 당신 때문에 함께, 그렇게 할 수 있습니다. 당신은 또한 같은 것을 할 수 있습니다 :

public void doExample2(Object input) {
    if (input instanceof Integer) {
        System.out.println("I am a number");
    } else if (input instanceof Graphics) {
        System.out.println("I am a Graphics");
    }
}

TEH 입력 매개 변수의 유형을 알 수 있습니다. 개체 모두의 기본 클래스입니다.

그래서 시나리오를 다시 받고. 당신 때문에 응용 프로그램의 입력 매개 변수가 항상 Graphics2D의 것의 맥락에서, 그 캐스팅을, 그리고 당신의 Graphics2D에서 제공하는 방법을 사용하는 것도 그 캐스팅을 수행 할 수 있습니다 이유입니다.

추천

출처http://10.200.1.11:23101/article/api/json?id=478555&siteId=1