类实现接口并拥有自己的新成员的类对象的类型是啥

Posted

技术标签:

【中文标题】类实现接口并拥有自己的新成员的类对象的类型是啥【英文标题】:what will be the type of class object where the class implements an interface and also has it own new members类实现接口并拥有自己的新成员的类对象的类型是什么 【发布时间】:2022-01-14 22:33:45 【问题描述】:

我是 OOP 和 typescript 的新手,所以这里是示例代码

interface Company
 compName:string;
 compId: number;
 compAdree:string;


class Employee implements Company
 compName="fb";
 compId=83487;
 compAdree="NY";
 emp_name="peter";
 emp_id=99348493;
 emp_adr="Ny"

所以在上面的代码中,Employee 类正在实现接口 company,该类有一些不在接口中的新成员,所以如果我创建 Employee 类的对象,该对象的类型是什么?

我遇到了一些代码,其中它是类类型,而在某些代码中是接口类型。所以我很困惑该使用哪个

会不会

let emp:Employee = new Employee()

还是会

let emp:Company = new Employee()

【问题讨论】:

两者都有效。在第二个示例中,您将被允许仅使用界面中列出的成员(例如,emp.compName 可以,但emp.emp_adr 会出错)。在这两种情况下,底层对象都将具有相同的原型/属性 您的课程代码似乎不正确。您的意思是分配给类字段而不是 : 【参考方案1】:

您可以将Company 视为超类型,将Employee 视为子类型。这意味着Employee 可以分配给Company。 考虑这个例子:

interface Company 
  compName: string;
  compId: number;
  compAdree: string;


class Employee implements Company 
  compName: "fb";
  compId: 83487;
  compAdree: "NY";
  emp_name: "peter";
  emp_id: 99348493;
  emp_adr: "Ny"


declare let company: Company;
declare let employee: Employee;

company = employee // ok

但反之亦然:

employee=company // error

让我们回到原来的例子。 这一行:

let emp:Employee = new Employee()
emp.compName // ok
emp.emp_adr // ok

表示允许emp 使用来自CompanyEmployee 的所有属性,而这一行:

let comp: Company = new Employee()
comp.compName // ok
comp.emp_adr // error

意味着comp 只允许使用Company 属性,尽管它在运行时也包含Employee。这就像静态限制。

请参阅Type Compatibility。

您可能还注意到Employee 是一个类,它在运行时和类型范围内都使用。这是打字稿类和枚举的特殊属性。它们都可以在两个范围内使用。

【讨论】:

以上是关于类实现接口并拥有自己的新成员的类对象的类型是啥的主要内容,如果未能解决你的问题,请参考以下文章

struts2中的类型转换,自定义类型转换器需要继承啥类

Java Review (十七面向对象----枚举类)

Java Review (十七面向对象----枚举类)

java加减乘除是啥类

(十三)对象克隆

在java中,有main方法的类叫啥类,没有main方法的类叫啥类