Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 OOP:如何强制扩展类提供私有方法?_Java_Oop - Fatal编程技术网

Java OOP:如何强制扩展类提供私有方法?

Java OOP:如何强制扩展类提供私有方法?,java,oop,Java,Oop,示例:如何将进一步的特定处理方法设置为私有方法 原因:我希望能够创建一个类型为B或C的新对象,并且程序员只能看到doStuff()。同时,B类和C类提供附加功能 abstract class A { protected abstract void furtherSpecificProcessing(); //concrete method utilizing abstract method public void doStuff() { //busy code f

示例:如何将进一步的特定处理方法设置为私有方法

原因:我希望能够创建一个类型为B或C的新对象,并且程序员只能看到doStuff()。同时,B类和C类提供附加功能

abstract class A
{
  protected abstract void furtherSpecificProcessing();

  //concrete method utilizing abstract method
  public void doStuff()
  { 
   //busy code
   furtherSpecificProcessing();
   //more busy code
  }

public class B extends A
{
  public void furtherSpecificProcessing
  {
    //Class B specific processing
  }
}

public class C extends A
{
 public void furtherSpecificProcessing
 {
   //Class C specific processing
 }
}

我认为您不能强制返回类型为私有的,以便重写方法

访问权限不得更严格。可以减少限制


我建议您阅读。

我认为您不能强制返回类型为私有,以便重写方法

访问权限不得更严格。可以减少限制


我建议阅读。

进一步特定处理()
重写为受保护的,而不是在扩展类中作为公共的。

进一步特定处理()
重写为受保护的,而不是在扩展类中作为公共的。

将方法声明为受保护的,而不是在类B和C中作为公共的。 比您需要的更有效:

B b = new B();
b.doStuff(); // Will do stuff
b.furtherSpecificProcessing(); // Will not compile

C类的实例也是如此,在B类和C类中都将方法声明为受保护的,而不是公共的。 比您需要的更有效:

B b = new B();
b.doStuff(); // Will do stuff
b.furtherSpecificProcessing(); // Will not compile


C类的实例也是如此

围绕这一点的任何设计方法?程序员可见是什么意思;b、 doStuff();或C=新的C()C.doStuff();不是b.doStuff()和b.FurthSpecificProcessing(),也不是其他人建议的c.doStuff()和c.FurthSpecificProcessing()。您可以尝试使用受保护的类,并确保相关类位于同一个包中。有任何围绕这一点的设计方法吗?程序员可见是什么意思?b=新b();b、 doStuff();或C=新的C()C.doStuff();不是其他人建议的b.doStuff()和b.FurthSpecificProcessing()或同等的c.doStuff()和c.FurthSpecificProcessing(),您可以尝试使用protected,并确保相关类位于同一个包中。为什么不将其声明为protected?(或者我这里遗漏了一些东西…)针对接口编程。看到了您的编辑。那么为什么该方法在C和B中被声明为公共的呢?如上所述,使该方法受到保护。我看不出你在这一点上还要求什么。你是如何获得裁员的?在超级类(AbsA)中放置常见的东西。虽然不能限制可见性,但您可以通过仅向类的用户公开接口来隐藏它们。为什么不将其声明为受保护?(或者我这里遗漏了一些东西…)针对接口编程。看到了您的编辑。那么为什么该方法在C和B中被声明为公共的呢?如上所述,使该方法受到保护。我看不出你在这一点上还要求什么。你是如何获得裁员的?在超级类(AbsA)中放置常见的东西。虽然可见性不能受到限制,但您可以通过仅向类用户公开接口来隐藏它们。您还可以将FutureSpecificProcessing设置为包私有(这将稍微不那么可见)。您还可以将FutureSpecificProcessing设置为包私有(这将稍微不那么可见)。