>source

나는 Type Script를 처음 사용하고 oop, 부모 클래스의 자식 메서드를 사용하려고 시도했지만 메서드가 인식되지 않습니다.

내 자식 클래스는 다음과 같습니다.

import {Ouvrage} from "./Class_Ouvrage";
import {Emprunt} from "./Class_Emprunt";
import {Adherant} from "./Class_Adherant";
export class Volumes extends Ouvrage {
private _NombreExemplaire: number;
private _NombreExemplaireEmpruntes: number;
private _auteur: string;
public get NombreExemplaire(): number {
    return this._NombreExemplaire;
}
set NombreExemplaireEmpruntes(value: number) {
    this._NombreExemplaireEmpruntes = value;
}
get NombreExemplaireEmpruntes(): number {
    return this._NombreExemplaireEmpruntes;
}
get auteur(): string {
    return this._auteur;
}
constructor(Pnombreexemplaire: number, Pnombreexemplairemprunte: number, Pauteur: string, PID: number, PTitre: string, Pdate: Date) {
    super(PID, PTitre, Pdate);
    this._auteur = Pauteur;
    this._NombreExemplaire = Pnombreexemplaire;
    this._NombreExemplaireEmpruntes = Pnombreexemplairemprunte;
}
descriptionVolume(): string {
    return "l'auteur de ce volume s'apelle : " + this.auteur + " , il reste " + this.NombreExemplaire + "disponible(s)" + " Le nombre de volumes déja emprunté, s'éleve a " + this.NombreExemplaireEmpruntes;
}
 public NbExemplaireDispo() : number{
        return this.NombreExemplaire - this.NombreExemplaireEmpruntes;
    }
}

다음은 메서드를 호출하려는 부모 클래스입니다.

import {Volumes} from "./Class_Volume";
import {Adherant} from "./Class_Adherant";    
export class Ouvrage{
    private _id : number;
    private _titre : string;
    private _date : Date;
get id(): number {
    return this._id;
}
get titre(): string {
    return this._titre;
}
get date(): Date {
    return this._date;
}
constructor(PID : number, PTitre : string, Pdate : Date) {
    this._id = PID;
    this._titre = PTitre;
    this._date = Pdate;
}
descriptionOuvrage() : string{
    return "Cet ouvrage s'apelle " + this.titre + " et il est sorti le " + this.date+" ";
}
 this.NbExemplaireDispo();
}

어떻게 만드나요 NbExemplaireDispo() 작동합니까?

내가 oop을 처음 사용한다고 말했듯이 이런 종류의 전화를하는 것은 좋은 습관이 아닙니다.

감사!

  • 답변 # 1

    i try to use a child method from the parent class but the method is not recognised

    ...

    as i said i'm new to oop, it's not a good practice to do this kind of call ?

    권리. 부모 클래스는 자식 클래스에 의해 정의 된 메서드를 호출해서는 안됩니다. 그 이유 중 하나는 호출을하는 인스턴스가 자식 클래스의 인스턴스가 아닐 수 있기 때문입니다 (단지 부모의 인스턴스 일 수도 있고 다른 자식의 인스턴스 일 수도 있음). 이 간단한 예를 고려하십시오.

    class Parent {
        parentMethod() {
            this.childMethod(); // Won't compile in TypeScript
        }
    }
    class Child extends Parent {
        childMethod() {
            // ...
        }
    }
    const p = new Parent();
    p.parentMethod(); // Would throw an error in JavaScript, because `parentMethod` tries
                      // to use `childMethod`, which doesn't exist -- it's a `Parent`, not
                      // a `Child`
    
    

    그리고 비슷한 문제가 있습니다. Child2Child2 방법이없고

    const c2 = new Child2();
    c2.parentMethod(); // Would throw in JavaScript
    
    

    TypeScript가 유용한 이유 중 하나는 이러한 '자바 스크립트에 던져 질 것'입니다. 런타임이 아닌 컴파일 타임에 이러한 사항을 경고합니다.

    부모가 자식이 다르게 처리 할 수있는 호출을해야하는 경우 부모에 대한 메서드를 정의하고우세하다아이에게. 예를 들면 :

    class Parent {
        parentMethod() {
            this.theMethod();
        }
        theMethod() {
            // ... this might even not do anything ...
        }
    }
    class Child extends Parent {
        theMethod() {
            // ... this can do something slightly different from `Parent`'s version
            // Can access `Parent`'s version if desired via `super.theMethod()`.
        }
    }
    const p = new Parent();
    p.parentMethod(); //Works
    
    

    당신은 abstract 방법 : 즉, 인스턴스를 만들 수 없음을 의미합니다. Parent , 하위 클래스는 메소드를 구현해야합니다.

    class Parent {
        parentMethod() {
            this.theMethod();
        }
        abstract theMethod();
    }
    class Child extends Parent {
        theMethod() {
            // ... this can do something slightly different from `Parent`'s version
            // Can access `Parent`'s version if desired via `super.theMethod()`.
        }
    }
    const c = new Child();
    c.theMethod(); //Works
    const p = new Parent(); // Won't compile, because `Parent` is abstract
    
    

관련 자료

  • 이전 PhoneStateListener가 Android 11에서 허용되는 등록 된 리스너 수를 초과합니다
  • 다음 AWS 접착제 작업으로 실수 된 데이터를 어떻게 덮어 씁니까?