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#的编程,因此使用了大写方法名称。我按照预期使用了抽象方法。我只需要在这里举一个例子,所有的孩子都需要很多完全相同的方法,但有些孩子需要稍微不同的方法,但必须是强制性的。如果你想给出强制性方法的定义,那么我可以按照预期使用抽象方法。我只需要在这里举一个例子,所有的孩子都需要很多完全相同的方法,但是有些孩子需要稍微不同的方法,但是需要强制方法。如果你想给出强制方法的定义,那么也可以