Javase 제19강: 다태상해
4729 단어 JavaSE
import java.util.Random;
public class RandomTest
{
public static void main(String[] args)
{
Random random = new Random();
int result = random.nextInt(16) + 1;
System.out.println(result);
}
}
결과 출력:
D:\src>java RandomTest 1
【설명】: 여기 출력 결과는 1부터 16까지 랜덤수입니다.
1. 다중태: 부모 유형의 인용은 하위 대상을 가리킬 수 있다.
public class PolyTest
{
public static void main(String[] args)
{
Parent parent = new Parent();
parent.sing();
}
}
class Parent
{
public void sing()
{
System.out.println("parent is singing");
}
}
class Child extends Parent
{
public void sing()
{
System.out.println("child is singing");
}
}
실행 결과:
D:\src>java PolyTest parent is singing
위 프로그램의 세 번째 행 코드를 수정합니다.
public static void main(String[] args)
{
// Parent parent = new Parent();
// parent.sing();
Child child = new Child();
child.sing();
}
실행 결과:
D:\src>java PolyTest child is singing
다음 절차의 세 번째 행 코드를 계속 수정합니다.
public static void main(String[] args)
{
// Parent parent = new Parent();
// parent.sing();
// Child child = new Child();
// child.sing();
Parent p = new Child();
p.sing();
}
실행 결과:
D:\src>java PolyTest child is singing
【설명】: Parent p = new Child();p 유형은 부모 유형입니다. 유형을 보면 왼쪽에 있는 Parent입니다.하위 클래스가 생성한 속성을 가리키고 다음으로sing()을 호출합니다.방법은 child()를 가리키면 하위 클래스를 호출하는 방법이기 때문에 하위 클래스를 출력하는 방법은 누구를 가리키면 하위 클래스를 호출하는 방법이다.
위 절차 계속 수정
public class PolyTest
{
public static void main(String[] args)
{
// Parent parent = new Parent();
// parent.sing();
// Child child = new Child();
// child.sing();
Parent p = new Child();
p.sing();
}
}
class Parent
{
public void sing()
{
System.out.println("parent is singing");
}
}
class Child extends Parent
{
/*
public void sing()
{
System.out.println("child is singing");
}
*/
}
실행 결과:
D:\src>java PolyTest parent is singing
【설명】: 이때 자류는 부류의 sing() 방법을 계승했다.
[중요] 위 절차를 계속 수정합니다.
public class PolyTest
{
public static void main(String[] args)
{
// Parent parent = new Parent();
// parent.sing();
// Child child = new Child();
// child.sing();
Parent p = new Child();
p.sing();
}
}
class Parent
{
/*
public void sing()
{
System.out.println("parent is singing");
}
*/
}
class Child extends Parent
{
public void sing()
{
System.out.println("child is singing");
}
}
실행 결과:
D:\src>javac PolyTest.java PolyTest.java:11: 오류: 기호 p.sing ()을 찾을 수 없음;^ 기호:메서드 sing() 위치:Parent 유형의 변수 p 오류 1개
【설명】: p는 하위 클래스 대상을 가리키는 인용이지만 p는 Parent 유형이다. Parent에는 이런 방법이 없다. 다중태에 대해 이렇게 이해할 수 있다. p가 하위 클래스를 가리키더라도 p가 있는 유형의 Parent에 반드시 이 방법이 존재해야 호출할 수 있다.p는 하위 클래스의 방법을 호출할 때 p가 있는 유형에 이 방법이 있는지 확인하고 있으면 하위 클래스의 방법을 호출한다. 그렇지 않으면 오류가 발생한다.
2.Parent p = new Child();다중 모드 변조법을 사용할 때 먼저 부류에 sing() 방법이 있는지 확인하고 없으면 컴파일 오류가 발생합니다.하위 클래스를 다시 호출하는 sing () 방법이 있다면
위 절차 계속 수정
public class PolyTest2
{
public static void main(String[] args)
{
Animal a = new Dog();
Dog dog = (Dog)a;
dog.sing();
}
}
class Animal
{
public void sing()
{
System.out.println("animal is singing");
}
}
class Dog extends Animal
{
public void sing()
{
System.out.println("dog is singing");
}
}
class Cat extends Animal
{
public void sing()
{
System.out.println("cat is singing");
}
}
실행 결과:
D:\src>java PolyTestdog is singing
【설명】: Animal a = new Dog();Dog dog = (Dog)a;이 두 문장은 하나의 강제 유형 변환으로 하나의 부형의 인용을 하위 유형의 인용에 강제한다. 이것은 다태적으로 하위 유형 변환이라고 하는데 실제적으로 가리키는 사람이 누구인지 주의해야 누구로 변환할 수 있다.예를 들어 a가 실제적으로 가리키는 것은 Dog 대상이기 때문에 유형을 Dog 유형의 인용으로 강제로 전환할 수 있다.
위 코드 세그먼트 수정 세 번째 줄 시작
Animal a = new Dog();
Dog dog = (Dog)a;
dog.sing();
Animal b = new Cat();
Cat cat = (Cat)b;
cat.sing();
실행 결과:
D:\src>java PolyTest2 dog is singing cat is singing
이 코드 세그먼트 수정을 계속하려면 다음과 같이 하십시오.
Animal a = new Dog();
Dog dog = (Dog)a;
dog.sing();
Animal b = new Cat();
Dog d = (Dog)b;
d.sing();
실행 결과:
D:\src>javac PolyTest2.java D:\src>java PolyTest2 dog is singing Exception in thread "main"java.lang.ClassCastException: Cat cannot be cast to Dog at PolyTest2.main(PolyTest2.java:9)
【설명】: 이 프로그램은 컴파일할 때 오류를 제시하고 바이트 파일을 실행할 때 오류가 발생하며 알림 클래스 변환 이상: 고양이는 개로 변환할 수 없습니다.b는 Cat 유형의 대상을 가리키는데 변환 후 b가 Dog 유형의 인용을 가리키기 때문에 오류가 발생했습니다.다음 형식으로 변환된 인용은 그 대상을 가리키며, 이 형식으로 변환된 인용을 강제로 할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WeakHashMap,IdentityHashMap,EnumMap다른 맵 구현 클래스와 달리 WeakHashMap 클래스의 키 대상은 간접적으로 약한 인용의 지시 대상으로 저장되며, 키가 정상적으로 사용되지 않을 때 자동으로 항목을 제거합니다.더 정확히 말하면, 주어진 키에 대한...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.