Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在Typescript中重写方法_Angular_Typescript_Function_Overriding - Fatal编程技术网

Angular 在Typescript中重写方法

Angular 在Typescript中重写方法,angular,typescript,function,overriding,Angular,Typescript,Function,Overriding,我有以下情况: abstract class A implements OnInit{ ngOnInit() { this.method(); } private method() { // doing stuff } } class B extends class A implements OnInit { ngOnInit() { this.method(); // B version

我有以下情况:

abstract class A implements OnInit{

    ngOnInit() {
        this.method();
    }

    private method() {
        // doing stuff
    }
}

class B extends class A implements OnInit {

    ngOnInit() {
         this.method(); // B version
    }

    method() {
        // Do different stuff from A
    }
}
我知道一个可能的解决方案是将类a中的method()设置为公共,但它位于我无法编辑的库中。 在我的B组件中,我需要对method()执行自定义版本,并防止出现a版本


这是如何实现的?

如果您使用抽象类,那么您的方法应该是抽象的,并且不应该有任何实现

使用抽象类如下()

或者,如果您确实希望在类A中实现该方法,则可以使用以下常规类()


若您使用抽象类,那个么您的方法应该是抽象的,并且不应该有任何实现

使用抽象类如下()

或者,如果您确实希望在类A中实现该方法,则可以使用以下常规类()


如果您不想使用
public
使用
protected
:我不明白问题是什么问题问题是我无法编辑库代码。我已经在许多其他组件中使用了它,因为默认行为是正确的,但在这个特定的组件中它不是。合作公司使用的是共享库,如果我修改它,他们的代码可能会中断。如果您不想使用
public
use
protected
:我不明白问题是什么问题我无法编辑库代码。我已经在许多其他组件中使用了它,因为默认行为是正确的,但在这个特定的组件中它不是。这是一个合作公司使用的共享库,如果我修改它,他们的代码可能会崩溃。不幸的是a类是“不可接触的”,它是合作公司框架的一部分,我不允许修改它,因为它是一个共享项目。不幸的是a类是“不可接触的”,它是一个合作公司框架的一部分,我不允许修改它,因为它是一个共享项目。
abstract class Person {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    display(): void{
        console.log(this.name);
    }

    abstract find(string): Person;
}

class Employee extends Person { 
    empCode: number;

    constructor(name: string, code: number) { 
        super(name); // must call super()
        this.empCode = code;
    }

    find(name:string): Person { 
        // execute AJAX request to find an employee from a db
        return new Employee(name, 1);
    }
}

let emp: Person = new Employee("James", 100);
emp.display(); //James

let emp2: Person = emp.find('Steve');
class Car {
    name: string;

    constructor(name: string) {
        this.name = name;
    }

    run(speed:number = 0) {
        console.log("A " + this.name + " is moving at " + speed + " mph!");
    }
}

class Mercedes extends Car {

    constructor(name: string) {
        super(name);
    }

    run(speed = 150) {
        console.log('A Mercedes started')
        super.run(speed);
    }
}

class Honda extends Car {

    constructor(name: string) {
        super(name);
    }

    run(speed = 100) {
        console.log('A Honda started')
        super.run(speed);
    }
}

let mercObj = new Mercedes("Mercedes-Benz GLA");
let hondaObj = new Honda("Honda City")

mercObj.run();  // A Mercedes started A Mercedes-Benz GLA is moving at 150 mph!
hondaObj.run(); // A Honda started A Honda City is moving at 100 mph!