我试图理解Interfaces,我在这个页面看到了一个例子,但它本身并不是一个接口的例子。
我对接口的理解:
是实现(方法,属性,事件等)的类与接口之间的契约。
因为在C#和.NET中,你不能进行多重继承,你可以使用接口,你可以使用那些你不能继承的类的方法,属性等。 / p>
所以这只是演示以及我尝试过的内容: (在不同的班级)
SQL> DROP TABLE TEST_TABLE;
Table dropped.
SQL> CREATE TABLE TEST_TABLE AS SELECT 1 A FROM DUAL;
Table created.
SQL> ALTER TABLE TEST_TABLE ENABLE ROW MOVEMENT;
Table altered.
SQL> --Sleep required here to prevent error on flashback.
SQL> DROP RESTORE POINT TEST_RESTORE_POINT;
Restore point dropped.
SQL> CREATE RESTORE POINT TEST_RESTORE_POINT;
Restore point created.
SQL> FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT;
FLASHBACK TABLE TEST_TABLE TO RESTORE POINT TEST_RESTORE_POINT
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
我做错了什么?
感谢。
答案 0 :(得分:2)
我做错了什么?
您未在Hello
的继承链中的任何位置实施Son
。如果更改了以下任何一项,您将正确实现该接口:
Son
继承自Mother
而非Father
Father
继承自Mother
Father
实施Hello
Son
实施Hello
接口可以不用于多个继承。继承仅对实现有效 - 您可以实现多个接口,但不能继承多个实现。
如果您想要重复使用多个类,那么 composition 通常是最好的方法。 Son
类将引用Father
和Mother
对象,并通过属性公开它们或创建传递属性和方法以获取底层实现。
答案 1 :(得分:-1)
我们使用接口来处理抽象而不是具体实现,为什么?简单的答案它使测试很容易用假的替换我们的类,并创建模块化应用程序(OOP)
要修复代码,您必须更改此行以转到接口变量而不是类:
IMother son1 = new Son();
son1.Hello() // --> Now exists.
在Son class
中实现接口方法之前,您的代码无法正常工作class Son : Father, IMother
{
public string Hello()
{
throw new NotImplementedException();
}
}
如果你不想在Son中实现接口方法,并且想要在Mother Class中访问该方法,那么你必须在Son类中继承Mother而不是Father类。