标签: abstract

Java:我应该在实现抽象方法时添加@Override注释吗?

在Java中覆盖非虚方法时,建议使用@Override注释,但是如果实现抽象方法怎么办?我也应该使用@Override吗?

java overriding annotations abstract

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

比较:界面方法与虚拟方法与抽象方法

每种方法的优点和缺点是什么?

  • 界面方法
  • 虚拟方法
  • 抽象方法

什么时候应该选择什么?做出这个决定时应该记住哪些要点?

c# virtual interface abstract

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

Java:抽象类中的静态字段

我刚开始用一个例子来解释它:

public abstract class A{
    static String str;
}

public class B extends A{
    public B(){
        str = "123";
    }
}

public class C extends A{
    public C(){
        str = "abc";
    }
}

public class Main{

    public static void main(String[] args){
        A b = new B();
        A c = new C();
        System.out.println("b.str = " + b.str);
        System.out.println("c.str = " + c.str);
    }
}
Run Code Online (Sandbox Code Playgroud)

这将打印出来:

b.str = abc

c.str = abc

但我想要一个解决方案,其中实例化超类的每个子类都有自己类变量,同时我希望能够通过标识符引用该类变量,或者在抽象超类中定义的方法调用.

所以我希望输出为:

b.str = 123

c.str = abc …

java static abstract

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

在C#中使用'抽象覆盖'有什么用?

出于好奇,我尝试覆盖基类中的抽象方法,并实现抽象方法.如下:

public abstract class FirstAbstract
{
    public abstract void SomeMethod();
}

public abstract class SecondAbstract : FirstAbstract
{
    public abstract override void SomeMethod();
    //?? what sense does this make? no implementaion would anyway force the derived classes to implement abstract method?
}
Run Code Online (Sandbox Code Playgroud)

很想知道为什么C#编译器允许编写'抽象覆盖'.这不是多余的吗?应该是一个编译时错误来做这样的事情.是否适用于某些用例?

谢谢你的关注.

c# overriding abstract

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

为什么Java不允许多重继承,但允许使用默认实现符合多个接口

我不问这个 - > 为什么Java中没有多重继承,但允许实现多个接口?

在Java中,不允许多重继承,但是,在Java 8之后,Interfaces可以拥有默认方法(可以自己实现方法),就像抽象类一样.在此上下文中,还应允许多重继承.

interface TestInterface 
{ 
    // abstract method 
    public void square(int a); 

    // default method 
    default void show() 
    { 
      System.out.println("Default Method Executed"); 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

java inheritance interface abstract java-8

47
推荐指数
5
解决办法
4733
查看次数

Java中的抽象变量?

我来自c#,这很容易,而且可能.

我有这个代码:

public abstract class clsAbstractTable {

    public abstract String TAG;
    public abstract void init();

}
Run Code Online (Sandbox Code Playgroud)

但是Eclipse告诉我我使用非法修改器.

我有这门课:

public class clsContactGroups extends clsAbstractTable {


}
Run Code Online (Sandbox Code Playgroud)

我希望以这种方式定义变量和方法,Eclipse 提示我,我没有实现抽象变量和方法.

我如何定义我的抽象类,以便提示我实现摘要?

编辑1

我将为不同的db表创建不同的类.每个类都应该有自己的TABLENAME变量,没有例外.每当我创建一个扩展抽象类的新类时,我必须确保这个变量是静态的.

然后在抽象类中我将有一个方法例如:init();

如果在这个init()方法中我调用TABLENAME,它应该从子类中获取值.

这样的事情也应该成功

String tablename=(clsAbstract)objItem.TABLENAME;
// where objItem can be any class that extended clsAbstract;
Run Code Online (Sandbox Code Playgroud)

编辑2

我希望在每个类中定义一个常量(静态),其名称用abstract定义.

  • 我在abstract中定义变量TABLENAME,但没有给出值.
  • 我创建了一个clsContactGroups,我应该提示我实现TABLENAME,这是获取一些数据的地方.例如:TABLENAME ="contactgroups";
  • 我创建了第二个类clsContacts,我应该提示我实现TABLENAME,这是获取一些数据的地方.例如:TABLENAME ="contacts";
    等等...

java variables class abstract

46
推荐指数
3
解决办法
10万
查看次数

在C++ 11中声明接口的最佳方法

众所周知,有些语言有接口的概念.这是Java:

public interface Testable {
  void test();
}
Run Code Online (Sandbox Code Playgroud)

如何以最紧凑的方式在C++(或C++ 11)中实现这一点并且代码噪声很小?我很欣赏一个不需要单独定义的解决方案(让标题足够).这是一个非常简单的方法,即使我发现越野车;-)

class Testable {
public:
  virtual void test() = 0;
protected:
  Testable();
  Testable(const Testable& that);
  Testable& operator= (const Testable& that);
  virtual ~Testable();
}
Run Code Online (Sandbox Code Playgroud)

这只是一个开始......而且已经超过了我想要的时间.怎么改进呢?也许在std命名空间的某个地方有一个基类专为此而设计?

c++ polymorphism interface abstract c++11

46
推荐指数
5
解决办法
3万
查看次数

Ruby中的抽象方法

如何强制子类在Ruby中实现方法.在Ruby中似乎没有一个抽象关键字,这是我在Java中采用的方法.还有另外一种类似Ruby的方法来强制抽象吗?

ruby abstract

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

PHP中的抽象常量 - 强制子类定义常量

我注意到你不能在PHP中使用抽象常量.

有没有办法可以强制子类定义一个常量(我需要在其中一个抽象类内部方法中使用)?

php constants abstract

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

枚举可以有抽象方法吗?

枚举可以有抽象方法吗?如果是这样,有什么用,并给出一个场景来说明这种用法.

java enums abstract

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