在Eclipse中,为什么缺少子类上显示的接口方法,而不是父类?
假设我有一个简单的界面:
public interface ISpeaks {
String talk();
}
Run Code Online (Sandbox Code Playgroud)
然后,我在一个扩展的类上实现了这个接口:
public abstract class Cat implements ISpeaks {
// forgot to implement talk()
}
public class Tiger extends Cat {
// also didn't implement talk()
}
Run Code Online (Sandbox Code Playgroud)
Eclipse抱怨Tiger缺少方法talk()(确切错误:) The type Tiger must implement the inherited abstract method ISpeaks.talk().我希望它告诉我Cat缺少talk(),因为Cat是明确实现接口的类.不是老虎.
这绝对是一个"呃?" 对我来说,因为我在Spring/Hibernate中,每当我向DAO接口添加一个方法时,每次数据库感知的测试用例都会出现这样的错误,这是一个缺少方法的错误 - 而不是单个错误模拟我的DAO的基本测试方法.
在C#程序中,我看到以下声明:
public class myForm : Form
public abstract myForm1 : myForm
public interface myInterface
public interface myInterface2 : myInterface
public class myClass : myForm1, myInterface2
Run Code Online (Sandbox Code Playgroud)
myClass对myForm1和myInterface2意味着什么?
myForm1是基类吗?如果是这样,并且C#中没有多重继承,那么这个与myClass的接口关系是什么?界面如何与班级不同?
我有一个Java接口的基本问题.
如果我有一个interface IA
和interface IB extends IA
现在,
class CK implements IB,
class CL implements IB,
class CM implements IB,
Run Code Online (Sandbox Code Playgroud)
......等
void foo(IA iFace) {
// I know how to check if iFace is of type CK/CL/CM ...
// Is it possible to check if iFace is of type IB ?
}
Run Code Online (Sandbox Code Playgroud)
希望我的问题很明确.
谢谢你的回复.
我真的很困惑,而且我已经阅读了很多关于这个主题的问题,而且我无法明确指出一个接口可以做抽象类无法做到的事情.
接口可以做什么,抽象类不能做?
我问我的Java类的情况下,但它是否适用于其他语言随意删除Java标签(可能是C#?).
编辑:我知道抽象类可以做界面不能做的事情,但是如果抽象类可以完成界面可以做的所有事情,那么界面的重点是什么?"实现多个接口"是什么意思?
有没有办法在像List这样的泛型类中定义类型,以包含只实现多个接口的对象?可能是类类型和接口.
例如:
List<myObjectBase, IDisposable, IClonable> myList;
Run Code Online (Sandbox Code Playgroud) 在c#中,如何定义一个由所有派生/实现类型实现的静态方法?我知道你无法在界面中定义静态方法.
基本前提是这样的:
比方说,我有一个生物基类.衍生类型将是人类和狗.
我想要一种方法,可以回答我说给定生物体的腿数.所以人类将是2,狗将是4,等等.
我可以将这样的方法作为实例方法,但它没有多大意义,因为它对于所有Dog类型都是相同的方法,对所有Human类型都是相同的,等等.
大家问候......
如果我有以下界面:
interface IMyInterface
{
int property { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下实施:
class MyClass : IMyInterface
{
// anything
}
Run Code Online (Sandbox Code Playgroud)
如何隐藏set属性的方法MyClass...换句话说,我不希望公开的set方法property,这可能吗?
使用抽象类很容易:
abstract class IMyInterface
{
int property { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)
然后,我只可能set在property实现上述的抽象类的类内...
为什么不选择这个设计:
// A.hpp
class A
{
public:
void do_something();
};
// A.cpp
#include "A.hpp"
#include <vector>
std::vector<int> impl_database_for_do_something;
static void impl_helper_for_do_something(const std::vector<int>& database){}
void A::do_something(){ impl_helper_for_do_something(impl_database_for_do_something); }
Run Code Online (Sandbox Code Playgroud)
而不是这一个:
// A.hpp
#include <vector>
class A
{
public:
void do_something();
private:
std::vector<int> database_for_do_something_;
void helper_for_do_something(const std::vector<int>& database){}
};
Run Code Online (Sandbox Code Playgroud)
我可以隐藏实现细节并使用源文件中定义的变量和静态函数加速编译吗?如果没有,这个设计有什么问题(除了继承)?
我有一个接口和一个实现此接口的类.
public interface IPhase {
string Description { get; set; }
int Id { get; }
string Phase { get; set; }
}
public class Phase : IPhase {
// Implementation here...
}
Run Code Online (Sandbox Code Playgroud)
现在,使用NHibernate 2.1.2.GA,我希望使用table-per-class-hierarchy来映射接口及其实现者,实际上,我不需要一个鉴别器,因为这个实现者将是唯一的类持久化在这张表中.我现在还没有使用NHibernate大约一年半,我在这里遇到了一些内存空白......
我已经阅读了这个问题和相关的答案,除了我没有使用FNH.
NHibernate映射:将层次结构保存到单个表而不带鉴别器
我想知道这个discriminator属性在使用时是否是强制性的subclass?
在这个特定的上下文中,我的XML映射会是什么样子?
谢谢你的帮助!
nhibernate interface nhibernate-mapping table-per-hierarchy discriminator
如果传入的java类是接口List的实现,我需要编写一个函数来返回true.有人知道如何在java中这样做吗?
就像是:
public boolean canConvert(Class c) {
//return true is c is an implementation of the interface List
}
Run Code Online (Sandbox Code Playgroud)
谢谢
interface ×10
c# ×4
java ×4
inheritance ×3
class ×2
c++ ×1
eclipse ×1
generic-list ×1
generics ×1
nhibernate ×1
pimpl-idiom ×1