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
useprotected
:我不明白问题是什么问题我无法编辑库代码。我已经在许多其他组件中使用了它,因为默认行为是正确的,但在这个特定的组件中它不是。这是一个合作公司使用的共享库,如果我修改它,他们的代码可能会崩溃。不幸的是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!