2016-12-02 14 views
5

Làm thế nào để xác định chính xác các phương thức trừu tượng riêng tư trong TypeScript?Làm thế nào để khai báo phương thức trừu tượng riêng trong TypeScript?

Đây là một mã đơn giản:

abstract class Fruit { 
    name: string; 
    constructor (name: string) { 
     this.name = name 
    } 
    abstract private hiFrase(): string; 
} 

class Apple extends Fruit { 
    isCitrus: boolean; 
    constructor(name: string, isCitrus: boolean) { 
     super(name); 
     this.isCitrus = isCitrus; 
    } 

    private hiFrase(): string { 
     return "Hi! I\'m an aplle and my name is " + this.name + " and I'm " + (isCitrus ? "" : " not ") + "citrus"; 
    } 

    public sayHi() { 
     alert(this.hiFrase()) 
    } 
} 

Mã này không hoạt động. Làm thế nào để sửa chữa nó?

+0

có thể trùng lặp của http://stackoverflow.com/questions/13333489/declaring-abstract-method-in-typescript –

+4

'private' == chỉ có thể trong lớp rất giống nhau. 'abstract' == không được thực hiện trong lớp này nhưng trong một số lớp kế thừa. Có một xung đột các định nghĩa ở đây. – deceze

+1

Bạn muốn 'abstract abstract', không phải' abstract trừu tượng'. – series0ne

Trả lời

5

Nhanh sang một bên, isCitrus phải là this.isCitrus. Với chương trình chính ...

Phương pháp trừu tượng phải hiển thị với các lớp con, vì bạn yêu cầu lớp con triển khai phương pháp.

abstract class Fruit { 
    name: string; 
    constructor (name: string) { 
     this.name = name 
    } 
    protected abstract hiFrase(): string; 
} 

class Apple extends Fruit { 
    isCitrus: boolean; 
    constructor(name: string, isCitrus: boolean) { 
     super(name); 
     this.isCitrus = isCitrus; 
    } 

    protected hiFrase(): string { 
     return "Hi! I\'m an aplle and my name is " + this.name + " and I'm " + (this.isCitrus ? "" : " not ") + "citrus"; 
    } 

    public sayHi() { 
     alert(this.hiFrase()) 
    } 
} 

Nếu bạn muốn phương pháp thật sự riêng tư, không khai báo nó trên lớp cơ sở.

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

class Apple extends Fruit { 
    isCitrus: boolean; 
    constructor(name: string, isCitrus: boolean) { 
     super(name); 
     this.isCitrus = isCitrus; 
    } 

    private hiFrase(): string { 
     return "Hi! I\'m an aplle and my name is " + this.name + " and I'm " + (this.isCitrus ? "" : " not ") + "citrus"; 
    } 

    public sayHi() { 
     alert(this.hiFrase()) 
    } 
} 
Các vấn đề liên quan