标签: abstract

Java中的抽象方法

我想写一个抽象方法,但编译器持续给出了这个错误:

抽象方法不能有一个体

我有这样的方法:

public abstract boolean isChanged() {
    return smt else...
}
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

java methods abstract

31
推荐指数
2
解决办法
12万
查看次数

在c#中使用派生返回类型覆盖抽象属性

我有四节课.Request,DerivedRequest,Handler,DerivedHandler.Handler类具有以下声明的属性:

public abstract Request request { get; set; }
Run Code Online (Sandbox Code Playgroud)

DerivedHandler需要覆盖此属性,以便它返回DerivedRequest:

public override DerivedRequest request { get; set; }
Run Code Online (Sandbox Code Playgroud)

有没有人对如何使这项工作有任何想法?

c# inheritance overriding derived abstract

30
推荐指数
3
解决办法
1万
查看次数

在Java中实例化接口

我有这个界面:

public interface Animal {
    public void Eat(String name);
}
Run Code Online (Sandbox Code Playgroud)

这段代码实现了这个接口:

public class Dog implements Animal {
    public void Eat(String food_name) {
        System.out.printf(food_name);
    }

    public static void main(String args[]) {
        Animal baby2 = new Dog(); //HERE!!!!!!!!!!!!!!!!!!!!!!
        baby2.Eat("Meat");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么代码有效?无法实例化接口.然而在这种情况下,界面被实例化(标记为"HERE !!!!!!!!!!!!!").

这里发生了什么?

java interface abstract

29
推荐指数
4
解决办法
4万
查看次数

构造函数使用autofac注入基类

我有一个抽象的基本控制器,它有一个构造函数,我希望在构建控制器时由autofac填充.

public abstract class BaseController : Controller
{
    protected ILogger { get; private set; }

    protected BaseController()
    {
    }

    protected BaseController(ILogger logger)
    {
        Logger = logger;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我从它派生一个控制器时,这似乎不起作用.

当我从控制器显式地显式调用构造函数时,我只能使它工作.这是正确的方法吗?

public class PublicController : BaseController
{
    public PublicController()
    {
    }

    public PublicController(ILogger logger) : base(logger)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

此外,使用mvc集成程序集,似乎没有办法共享容器供其他类进行自己的解析.我在某处读到这不鼓励,为什么不呢?这只是为了解耦任何单个ioc框架的依赖性吗?构造函数注入是在heirachy中填充依赖的唯一方法.

谢谢

constructor code-injection abstract autofac

26
推荐指数
1
解决办法
1万
查看次数

Java:静态抽象(再次) - 最佳实践如何解决

理论上我理解Java中没有抽象静态的原因,例如为什么静态方法在Java中不是抽象的.

但是我如何解决这样的问题呢?

我的应用程序使用几种类型的文件,我想分配静态属性,如该文件类型的描述(如"数据文件",另一种是"配置文件"等).显然,我会把它放到一个静态字符串中,以便在不实例化文件的情况下访问描述(对GUI文件很有用).另一方面,显然所有文件类型都应该有一些常见的方法getStatus(),显然我想从一个共同的超类继承MyFileType.

getDescription() 当然在超类中是抽象的.

尝试使用超类和接口的组合,但类似的问题:不允许静态实现抽象方法.

Java大师将如何解决这个问题?我想创建它真的是一个糟糕的实现吗?

非常感谢,Philipp

java static abstract

25
推荐指数
2
解决办法
3万
查看次数

覆盖哪种方法?

Class Arun()方法和接口B也有run()方法.问题很简单,哪种run()方法在Main课堂上被覆盖,我们将如何证明这一点?为什么此代码中没有冲突(编译时错误)?

class A{
    void run(){System.out.println("A class");}
}

interface B{
    void run();
}

class Main extends A implements B{
    public static void main(String args[]){         
        Main m = new Main();
        m.run();
    }

    // Overridding method
    public void run(){
        System.out.println("run method");
    }
}
Run Code Online (Sandbox Code Playgroud)

java methods overriding interface abstract

25
推荐指数
1
解决办法
959
查看次数

Java - 包含变量的抽象类?

让抽象类定义实例变量是一种好习惯吗?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}
Run Code Online (Sandbox Code Playgroud)

然后子类ExternalJavaScript.class将自动获取源变量,但是如果所有子类本身都定义了源代码而不是继承,我觉得读代码更容易.

你有什么建议?

/亚当

java variables class abstract

24
推荐指数
2
解决办法
10万
查看次数

C#:在不定义新类的情况下创建抽象类的实例

我知道它可以用Java完成,因为我过去曾广泛使用过这种技术.Java中的一个例子如下所示.(附加问题.这种技术被称为什么?如果没有名称,很难找到这样的例子.)

public abstract class Example {
   public abstract void doStuff();
}

public class StartHere{
   public static void main(string[] args){
      Example x = new Example(){
         public void doStuff(){
            System.out.println("Did stuff");
         }            
      };
      x.doStuff();
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的主要问题是,这也可以在C#中完成,如果是这样,怎么样?

c# abstract-class abstract anonymous-class

24
推荐指数
4
解决办法
3万
查看次数

将抽象readonly属性覆盖为读/写属性

我想只强制从基本抽象类在给定属性上实现C#getter.如果需要,派生类可以为该属性提供一个setter,以供公共使用静态绑定类型.

给出以下抽象类:

public abstract class Base
{
    public abstract int Property { get; }
}
Run Code Online (Sandbox Code Playgroud)

如果我想要一个也实现了setter的派生类,我可以天真地尝试:

public class Derived : Base
{
    public override int Property
    {
        get { return field; }
        set { field = value; } // Error : Nothing to override.
    } 

    private int field;
}
Run Code Online (Sandbox Code Playgroud)

但是后来我遇到语法错误,因为我试图覆盖不存在的setter.我尝试了其他方式,例如声明基本setter私有等等,我仍然偶然发现所有类型的错误阻止我这样做.必须有办法做到这一点,因为它不会破坏任何基类合同.

顺便说一句,它可以通过接口完成,但我真的需要默认实现.

我经常偶然发现这种情况,我想知道是否有一个隐藏的C#语法技巧,否则我将使用它并实现一个手动SetProperty()方法.

c# properties abstract

24
推荐指数
2
解决办法
1万
查看次数

PHP接口:指定任何可见性

我正在使用一组类的接口.我不过是因为我想对于任何一个问题,visibility在接口被允许(即:public,protectedprivate).

我需要父方法只受保护,我需要子方法是私有的,但我得到错误说

致命错误:接口方法的访问类型Baz :: qux()必须在<带Baz/Bar>的文件中省略."

我尝试在接口中指定其他可见性方法Baz并删除public,但它们都失败了.

有没有办法可以通过界面来做到这一点?如果没有,那么有没有办法可以宣布它abstract,我也尝试过,但失败了.

interface Baz
{
    public function qux();
}

class Bar implements Baz
{
    protected function qux()
    {
        //do foo
    }
}

class Foo extends Bar implements Baz
{
    private function qux()
    {
        parent::qux();
    }
}
Run Code Online (Sandbox Code Playgroud)

php oop interface abstract

23
推荐指数
2
解决办法
2万
查看次数