PHP에서는 한 클래스에 다른 클래스의 메소드를 사용해야 하는 상황이 자주 발생합니다. 이때 다른 클래스를 상속하거나 인스턴스화하여 해당 메서드를 얻을 수 있습니다. 상속이란 한 클래스가 다른 클래스의 속성과 메서드를 상속하는 것을 의미하며, 이는 확장 키워드를 통해 달성됩니다. 인스턴스화란 클래스의 인스턴스 객체를 생성하고, 해당 객체를 통해 다른 클래스의 메서드를 호출하는 것을 말합니다. 상속이든 인스턴스화이든 한 클래스에서 다른 클래스의 메서드를 쉽게 얻을 수 있어 코드의 재사용성과 유연성이 향상됩니다.
다른 수업을 확장하는 수업이 있어요. 사용자 입력에 따라 "a"를 입력하면 클래스는 하위 클래스 a가 되어야 하지만, "b"를 입력하면 클래스는 하위 클래스 b가 됩니다. 메인 클래스에 만들어야 할 변수가 있습니다. 내가 정의한 변수가 메인 클래스에서 왔기 때문에 하위 클래스의 메서드에 액세스할 수 없습니다. 어떻게 작동하게 할 수 있나요?
다음은 분해의 예입니다. myclass 변수는 다른 곳에서 사용되므로 어디에서나 하위 클래스로 사용할 수 있어야 합니다.
으아악메인 클래스에 subclassamethod와 subclassbmethod를 넣을 수 있다는 것을 알고 있지만, 서브클래스의 일부가 아닌 경우 이러한 메서드를 호출할 수 있기를 원하지 않습니다.
myclass가 subclassa와 subclassb를 모두 허용하도록 선언할 수 있는 방법이 있나요?
이는 변수 myclass
存在,并且被限制为指向 null
,或者指向类的实例,使得该类是 mainclass
또는 그 하위 유형을 의미합니다.
java가 설정된 방식에 따라 java는 가능한 모든 시나리오에서 합리적이지 않는 한 이 변수와의 모든 상호 작용 컴파일을 거부합니다. p>
즉, 당신 이 코드 흐름의 어느 시점에서 해당 변수가 mysubclassb
의 인스턴스를 가리켜야 한다는 것을 합리적인 의심을 넘어 증명할 수 있더라도 컴파일러는 이에 대해 신경 쓰지 않을 것입니다.
귀하의 코딩 스타일이 의심스럽습니다. 이것은 당신의 자바 방식이 아닙니다.
myclass
변수 이름은 "이게 어떻게 작동하는지 이해가 안 돼요"라고 비명을 지른다는 점에 유의하세요. 이는 매우 오해의 소지가 있습니다. 변수는 클래스가 아닌 인스턴스만 참조할 수 있습니다.
참고로 static
在您的代码片段中被滥用。静态对于大多数java项目来说通常不是必需的,也是一个比较高级的概念。如果您不想了解其具体含义,也没关系。但你一定不能使用它。 main
目前必须是静态的(很快从 jdk22+ 开始就不必是静态的),所以解决方案是立即摆脱 static
.
다음은 이를 수행하는 방법의 예입니다. 다음 코드 조각은 유형과 변수에 더 나은 이름을 사용하여 상황을 더 명확하게 만듭니다.
으아악new subclassa()
코드와 myobject.subclassamethod()
코드가 가깝지 않으면 작동하지 않습니다. new subclassa()
和代码 myobject.subclassamethod()
不靠近,那么这将不起作用。您必须使用 instanceof
来检查 myclass
(역시 매우 잘못된 이름)가 올바른 유형인지 확인하려면 instanceof
를 사용해야 합니다. 다음과 같습니다:
이것은 animal
是否指向 dog
实例或 dog
类型的某个子类型的对象。如果不是,则 if 不会按照您的预期执行任何操作(animal 不是 dog 的实例,因此 if 不会执行其内容)。如果是,则创建一个新变量 dog dog
指向它,输入 dog
를 확인하여 이에 대해 개 전용 메소드를 호출할 수 있도록 합니다.
일반적으로 instanceof
를 사용하면 코드가 잘못 설정되었음을 의미합니다. 변수 animal Animal
의 요점은 모든 동물instanceof
意味着您的代码设置错误。拥有变量 animal animal
的全部意义在于它可以包含任何动物 - 如果您的代码实际上需要它是一只狗,那么它应该是 dog dog
。或者,您应该有一个该代码的子类,一个专门针对 dogs 的版本,其中有一个定义为 dog dog
的字段。如果它是一个对多种对象的细节进行编码的方法(if(猫猫的动物实例)docatthing(); else if(狗狗的动物实例)dodogthing();
等的大列表),那么应该实际上是 animal
类中的一个抽象方法,animal
的每个实现都提供一个实现:带有 class dog
을 포함할 수 있다는 것입니다. 코드에서 실제로 개여야 하는 경우 dog dog
여야 합니다. . 또는 해당 코드의 하위 클래스, 즉 dog dog
로 정의된 필드가 있는 개 전용 버전이 있어야 합니다. 여러 개체의 세부 정보를 인코딩하는 메서드인 경우(if (animal 인스턴스 of cat) docatthing(); else if (animal 인스턴스 of dog) dodogthing();
etc. list) 실제로 animal
클래스의 추상 메서드여야 하며 animal
의 각 구현은 구현을 제공합니다. class dog
를 사용하면 > dog- 특정 코드는 개 특정 코드가 존재하는 곳이기 때문입니다.
어느 쪽이든 instanceof
는 필요하지 않으므로 instanceof
,因此,如果你确实使用 instanceof
해야 한다면
instanceof
를 사용하세요. 특히 초보자가 사용하는 경우에는 코드 스타일 측면에서 95% 이상의 시간이 소요됩니다. 매우 나쁜 방법입니다. "나쁜"이란 이해하기 어렵고 유연성이 없음(코드 요구 사항의 향후 변경은 모든 비학술 프로젝트에서 항상 겪는 일이므로 생각보다 더 많은 노력이 필요함), 기존 라이브러리에 통합하기 어렵고 종종 클래스별 Java가 아닌 것을 의미합니다. is - 지구상의 대부분의 Java 프로그래머가 수행하는 작업이 아니므로 이 코드의 학습 및 이해 곡선을 불필요하게 복잡하게 만듭니다. 🎜위 내용은 다른 클래스를 확장하는 클래스에서 메서드 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!