Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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)中的超级方法_Java_Inheritance_Subclass_Superclass - Fatal编程技术网

如何防止子类(java)中的超级方法

如何防止子类(java)中的超级方法,java,inheritance,subclass,superclass,Java,Inheritance,Subclass,Superclass,请注意这一点。 我有一个超级班 class A { public void update(int num) {...} } 还有一节课。A类继承 class B extends A { public void update(string str) {...} } B obj = new B(); obj.update(50); // oh no, bad obj.update(""); // yes 现在,我希望当我从类B创建新的时,类A的update()不能访

请注意这一点。 我有一个超级班

class A
{
    public void update(int num)
    {...}
}
还有一节课。A类继承

class B extends A
{
   public void update(string str)
   {...}
}

B obj = new B();
obj.update(50); // oh no, bad
obj.update(""); // yes

现在,我希望当我从类B创建新的时,类A的update()不能访问-换句话说,我只想访问B的update()方法

只有在超级类型和子类型中具有相同参数的相同方法名时,才能有效地覆盖它。在您的情况下,标识的方法是不同的。。它们采用不同的参数,因此根据您作为参数传递的内容,它会调用相应的方法。

只有在超级类型和子类型中具有相同参数的相同方法名时,才能有效地覆盖它。在您的情况下,标识的方法是不同的。。它们采用不同的参数,因此根据您作为参数传递的内容,它将调用相应的方法。

实际上,您可以重写该方法并引发异常是一种解决方案

class A
{
    public void update(int num)
    {...}
}

class B extends A
{
   public void update(int i) { 
       throw new UnsupprotedOperationException();
   }
   public void update(string str)
   {...}
}
或者可以使用泛型实现一个类。这可能不起作用,但想法是可行的

class A<T>
{
    public void update(T num)
    {...}
}

class B extends A<String>
{
   public void update(String str)
   {...}
}
A类
{
公共无效更新(T num)
{...}
}
B类扩展了A类
{
公共无效更新(字符串str)
{...}
}

实际上,您可以重写该方法并引发异常,这是一种解决方案

class A
{
    public void update(int num)
    {...}
}

class B extends A
{
   public void update(int i) { 
       throw new UnsupprotedOperationException();
   }
   public void update(string str)
   {...}
}
或者可以使用泛型实现一个类。这可能不起作用,但想法是可行的

class A<T>
{
    public void update(T num)
    {...}
}

class B extends A<String>
{
   public void update(String str)
   {...}
}
A类
{
公共无效更新(T num)
{...}
}
B类扩展了A类
{
公共无效更新(字符串str)
{...}
}

将基类方法设置为私有

class A
{
    private void update(int num)
    {

    }
}

将基类方法设置为私有

class A
{
    private void update(int num)
    {

    }
}

您所做的就像重载
update
方法,因为它具有相同的名称,但参数不同。因此,在您的情况下,使用字符串可以防止超类的更新。如果是这样,那么从设计角度来看,B不是a的子类。因此,如果有人遇到这种需求,您的整个设计都是不正确的,首先回顾一下设计。你所做的就像是重载
update
方法,因为它的名称相同,但参数不同。因此,在您的情况下,使用字符串可以防止超类的更新。如果是这样,那么从设计角度来看,B不是a的子类。因此,您的整个设计是不正确的,如果有人遇到这种需求,请首先检查设计。