好的,我正在尝试开始真正学习PHP中的OOP风格.我已声明了接口和类,并具有实现接口的类.我想知道,是不是只能将接口文件加载到PHP脚本文件中并从接口调用方法而不是加载类实现文件?如果是这样,那将如何做到b/c我无法找到答案.谢谢!
我有以下层次结构:
我有以下层次结构:
GameStateBaseClass -> IGameStateInterface -> IntroState
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我使用GameEngine引用实例化一个IntroState时(我在GameStateBaseClass中定义)我得到以下错误:
错误1错误C2664:'IntroState :: IntroState(const IntroState&)':无法将参数1从'GameEngine'转换为'const Short :: IntroState&'
在GameStateBaseClass中,我定义了一个带有const GameState引用的构造函数,在main.cpp中我传入了一个游戏引擎的实例.为什么它试图将我的GameEngine参数转换为IntroState引用呢?
这是相应的代码:
GameStateBaseClass.hpp
class GameStateBaseClass
{
public:
GameStateBaseClass(const GameEngine &instance);
private:
GameStateBaseClass(void); // = delete; // c++1x
GameStateBaseClass(const GameStateBaseClass &instance); // = delete; // c++1x
GameStateBaseClass operator=(const GameStateBaseClass &instance); // = delete; // c++1x
// private members
const GameEngine &game_engine_instance;
}
Run Code Online (Sandbox Code Playgroud)
GameStateBaseClass.cpp
GameStateBaseClass::GameStateBaseClass(const GameEngine &instance)
: game_engine_instance(instance) {
}
// IGameStateInterface.hpp
class IGameStateInterface : GameStateBaseClass
{
public:
virtual void Init() = 0;
virtual void …Run Code Online (Sandbox Code Playgroud) 如何从扩展到接口的类实现方法?
我有这个界面:
public Interface myInterface
{
public static int myMethod();
}
Run Code Online (Sandbox Code Playgroud)
而这堂课:
public class MyClass : myInterface
{
// And I want here to implement the method form myInterface and i don't know how
}
Run Code Online (Sandbox Code Playgroud) 因此在java中,初始化接口(如集合或列表)的方法是创建实现它的类的实例,例如:
Collection<Object> moo = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
如果我想在稍后的代码中指定一个实现,我想通过创建另一个类来实现这一点:
class ListList extends ArrayList{
}
Run Code Online (Sandbox Code Playgroud)
然后使用.初始化变量
Collection<Object> moo = new ListList();
Run Code Online (Sandbox Code Playgroud)
然后,如果我想稍后更改实现,那么所需要的就是更改ListList扩展的内容.
所以,这里有一个问题......是否有更好的方法(我还是觉得我对这类事情缺乏经验).
我想为WPF用户控件集实现一个接口(添加行为).我正在使用MVVM设计模式.我应该在哪里实现界面?在View模型类后面或中的usercontrol代码中?
例如:
我的界面是
interface IWizard
{
event RoutedEventHandler MoveNext;
event RoutedEventHandler MoveBack;
event RoutedEventHandler Cancelled;
bool IsLast;
bool IsFirst;
}
Run Code Online (Sandbox Code Playgroud)
现在在其他地方我想访问这个接口实现的用户控件.
((IWizard)userControl).MoveNext += ...
((IWizard)userControl).MoveBack += ...
((IWizard)userControl).IsLast = true;
Run Code Online (Sandbox Code Playgroud)
等等..
在UserControl代码后面实现
我不能直接在视图模型中访问接口的属性/方法.我必须手动链接它们.对 ?
IsLast一个按钮的可见性绑定(TwoWay Bind)属性.在View模型类中实现
我无法将usercontrol作为Interface对象访问.例如:((IWizard)userControl).MoveNext += ...
使用MVVM设计模式在Usercontrol上实现接口的最佳实践是什么?
我有一个消息接口:
public interface IMessage
{
int Id { get; set; }
string Body { get; set; }
string Title { get; set; }
Employee CreatedBy { get; set; }
MessageType MessageType { get; set; }
void Send(IEnumerable<User> recipients);
// or: void Send(User recipient);
}
Run Code Online (Sandbox Code Playgroud)
每个实现都必须具有发送消息的Send方法,但根据方案,Send方法不同.即如果它是私人消息,则只有一个收件人,并且还向该特定用户发送了另外的邮件通知,公共消息不会这样做.
该参数可以是用户列表或单个用户.我该如何实现呢?
我知道我可以为私人消息制作一个用户列表,但最好的情况是它是否像重载方法一样.
这是代码:
public class MyClass implements Inreface1, Inreface2 {
public MyClass() {
System.out.println("name is :: " + name);
}
public static void main(String[] args) {
new MyClass();
}
}
//Interface1
public interface Inreface1 {
public String name="Name";
}
//Interface2
public interface Inreface2 {
public String name="Name";
}
Run Code Online (Sandbox Code Playgroud)
这是它导致的错误:
字段名称不明确
问题是什么?什么是暧昧的?
我想在Scala中使用NIO.2特性(类在java.nio.file中):
在Java中我会这样做:
Files.newDirectoryStream(Paths.get("/tmp"), new DirectoryStream.Filter<Path>() {
@Override
public boolean accept(Path entry) throws IOException {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我怎么能在Scala中做同样的事情?该Fitler是内部的静态接口DirectoryStream界面.
谢谢.
编辑:如果您想建议我另一个列出文件的库/方法,请不要回复.我主要对主要问题感兴趣.
我有这样的界面:
interface IService
{
....
}
public class myservice:IService
{
...
}
Run Code Online (Sandbox Code Playgroud)
myservice类Impliment IService接口; 如果我这样说
myservice类继承自IService
这是错的吗?
如果错误为什么多重继承我们有这个定义:
多重继承是一些面向对象的计算机编程语言的一个特性,其中一个类可以从多个超类继承行为和特性.
支持多重继承的语言包括:C++,Common Lisp(通过CLOS),EuLisp(通过EuLisp对象系统TELOS),Curl,Dylan,Eiffel,Logtalk,Object REXX,Scala(通过使用mixin类),OCaml,Perl ,Perl 6,Python和Tcl(通过Incremental Tcl).1
一些面向对象的语言,如C#,Java和Ruby实现单继承,尽管协议或"接口"提供了真正的多重继承的一些功能. 多重继承
如果接口提供多重继承...我可以说我从一个接口继承......
首先,我无处不在的语言是PHP,我正在考虑学习Java.
因此,让我将我的问题分成两个密切相关的部分.
这是第一部分.
假设我有一个域模型类.它有一些getter,setter,一些查询方法等.有一天我想有可能比较它们.所以它看起来像:
class MyEntity extends AbstractEntity
{
public function getId()
{
// get id property
}
public function setId($id)
{
// set id property
}
// plenty of other methods that set or retrieve data
public function compareTo(MyEntity $anotherEntity)
{
// some compare logic
}
}
Run Code Online (Sandbox Code Playgroud)
如果它是Java,我应该实现一个Comparable接口.但为什么?多态性?Readbility?或者是其他东西?如果它是PHP - 我应该Comparable为自己创建界面吗?
所以这是第二部分.
我的同事告诉我,Java中的一个经验法则是为类的每个行为方面创建一个接口.例如,如果我想将此对象呈现为字符串,我应该通过类似的方式来表明这种行为implements Stringable,如果PHP的Stringable情况如下:
interface Stringable
{
public function __toString();
}
Run Code Online (Sandbox Code Playgroud)
这真的是一个经验法则吗?这种方法有什么好处?它在PHP中值得吗?在Java?