Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java childs的抽象类和强制方法?_Java_Oop_Interface_Abstraction - Fatal编程技术网

Java childs的抽象类和强制方法?

Java childs的抽象类和强制方法?,java,oop,interface,abstraction,Java,Oop,Interface,Abstraction,我有一个抽象基类,它的每个子类都应该有一个特定的强制函数,但略有不同。这是否可能使用抽象类,或者我应该为此使用接口 我将使用这样的结构 public abstract class Animal { //Mandatory method Public void sound() { } } public class Cat extends Animal { public void sound() { System.out.print

我有一个抽象基类,它的每个子类都应该有一个特定的强制函数,但略有不同。这是否可能使用抽象类,或者我应该为此使用接口

我将使用这样的结构

public abstract class Animal
{
    //Mandatory method
    Public void sound()
    {

    }
}

public class Cat extends Animal
{
    public void sound()
    {
        System.out.println("Miauw");
    }
}

public class Dog extends Animal
{
    public void sound()
    {
        System.out.println("Woof");
    }
}

//I will put all these child objects in a List<Animal> and need to call these methods.

for (Animal a : animalList)
{
    a.sound();
}
公共抽象类动物
{
//强制方法
公众虚空之声()
{
}
}
公营猫科动物
{
公众虚空之声()
{
System.out.println(“Miauw”);
}
}
公家犬
{
公众虚空之声()
{
系统输出打印(“Woof”);
}
}
//我将把所有这些子对象放在一个列表中,并需要调用这些方法。
(动物a:动物学家)
{
a、 声音();
}
我们将如何处理这个结构?我必须补充一点,我使用的是一个抽象类,因为有很多相同的方法需要在子类之间共享。只是有些方法需要彼此不同,但必须是强制性的,并且可以从基类访问。

您正在寻找:

public abstract class Animal
{
    //Mandatory method
    abstract public void sound();
}
但也要看看其他用户的建议:

  • 方法名称使用小写字母
  • 关键字
    public
    总是小写
  • 如果您的动物类没有所有子类的通用代码,请使用接口
您正在寻找:

public abstract class Animal
{
    //Mandatory method
    abstract public void sound();
}
但也要看看其他用户的建议:

  • 方法名称使用小写字母
  • 关键字
    public
    总是小写
  • 如果您的动物类没有所有子类的通用代码,请使用接口

    • 在这种情况下,抽象类和接口都可以工作。您希望使用抽象类的时候,是希望在所有子类之间共享公共方法和数据的时候。例如,如果
      Animal
      有一个权重变量,每个子类都设置该变量

      注意:在抽象类中,任何不想实现的方法都必须声明为抽象。请参见我如何修改下面的
      Sound()
      。另外,一个额外的提示是,标准规定方法名称应该以小写字母开头,因此我将
      Sound
      改为
      Sound

      public abstract class Animal
      {
          private int weight;
      
          public void setWeight(int weight) {
              this.weight = weight;
          }
      
          public int getWeight() {
              return weight;
          }
      
          //Mandatory method
          abstract public void sound();
      }
      
      public class Cat extends Animal
      {
          public Cat(int weight) {
              this.setWeight(weight);
          }
      
          public void sound()
          {
              System.out.println("Miauw");
          }
      }
      
      public class Dog extends Animal
      {
      
          public Dog(int weight) {
              this.setWeight(weight);
          }
      
          public void sound()
          {
              System.out.println("Woof");
          }
      }
      

      在这种情况下,抽象类和接口都可以工作。您希望使用抽象类的时候,是希望在所有子类之间共享公共方法和数据的时候。例如,如果
      Animal
      有一个权重变量,每个子类都设置该变量

      注意:在抽象类中,任何不想实现的方法都必须声明为抽象。请参见我如何修改下面的
      Sound()
      。另外,一个额外的提示是,标准规定方法名称应该以小写字母开头,因此我将
      Sound
      改为
      Sound

      public abstract class Animal
      {
          private int weight;
      
          public void setWeight(int weight) {
              this.weight = weight;
          }
      
          public int getWeight() {
              return weight;
          }
      
          //Mandatory method
          abstract public void sound();
      }
      
      public class Cat extends Animal
      {
          public Cat(int weight) {
              this.setWeight(weight);
          }
      
          public void sound()
          {
              System.out.println("Miauw");
          }
      }
      
      public class Dog extends Animal
      {
      
          public Dog(int weight) {
              this.setWeight(weight);
          }
      
          public void sound()
          {
              System.out.println("Woof");
          }
      }
      

      您正在寻找Java的
      abstract
      修饰符


      您正在寻找Java的
      abstract
      修饰符


      在这种情况下,您应该使用接口,因为您并没有定义任何方法,若您只想提供声明,那个么接口就可以了


      如果您使用抽象类,您将通过重写方法并再次定义它来增加开销,在这种情况下,您应该使用接口,因为您没有定义任何方法,如果您只想提供声明,那么接口就可以了



      如果您使用抽象类,则会覆盖该方法并再次定义它,从而增加开销

      您使用的是哪个Java版本?您的访问修饰符对Java无效。一般提示始终使用接口,仅当不同子类EAH周围存在相同的某些方法实现时,才会使用抽象类,我只是在这里的文本框中写了一个简单的例子。您使用哪个Java版本?您的访问修饰符对Java无效。一般提示使用接口始终,抽象类仅在不同子类之间存在相同的某些方法实现时使用EAH,我只是在这里的文本框中写了一个简单的例子。为什么方法名以大写字母开头?这是违反Java代码标准的。我复制了他的示例。谢谢,我在执行此操作时出错,但必须去掉大括号。这正是我要找的。我开始学习C#,在我不注意的情况下,我仍然使用C夏普命名约定,并且很快就把事情写在纸上。为什么方法名以大写字母开头?这是违反Java代码标准的。我复制了他的示例。谢谢,我在执行此操作时出错,但必须去掉大括号。这正是我要找的。我开始学习C#,当我不注意的时候,我仍然在使用C夏普命名约定,并且很快地把事情写在纸上。为什么所有的方法名称都以大写字母开头?这与Java代码标准背道而驰。我只是使用了与提问者相同的风格。我只是快速键入了一个示例,并学习了大部分使用C#的编程,因此使用大写方法名称。为什么所有方法名称都以大写字母开头?这与Java代码标准背道而驰。我只是使用了与提问者相同的风格。我只是快速键入了一个示例,并学习了大部分使用C#的编程,因此使用了大写方法名称。我按照预期使用了抽象方法。我只需要在这里举一个例子,所有的孩子都需要很多完全相同的方法,但有些孩子需要稍微不同的方法,但必须是强制性的。如果你想给出强制性方法的定义,那么我可以按照预期使用抽象方法。我只需要在这里举一个例子,所有的孩子都需要很多完全相同的方法,但是有些孩子需要稍微不同的方法,但是需要强制方法。如果你想给出强制方法的定义,那么也可以