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 为扩展为级别的方法授予不同的权限_Java_Oop_Extend_Extends - Fatal编程技术网

Java 为扩展为级别的方法授予不同的权限

Java 为扩展为级别的方法授予不同的权限,java,oop,extend,extends,Java,Oop,Extend,Extends,我认为这很有趣,如果我们可以为父类的方法授予不同的权限,以限制扩展类中每个级别的范围 假设我们有三种方法a1、a2和a3的类A public class A { // Java Examples void a1(){} void a2(){} void a3(){} } 假设B类扩展了A(我们用这种方式创建了3个级别)。现在类B可以从类A扩展2个方法(方法a1、a2) 在C类扩展了B类之后,现在B类可以从A(我的意思是a3)扩展2个方法,下一步,我们没有什么(方法/方法

我认为这很有趣,如果我们可以为父类的方法授予不同的权限,以限制扩展类中每个级别的范围

假设我们有三种方法a1、a2和a3的类A

public class A { // Java Examples
    void a1(){}
    void a2(){}
    void a3(){}
}
假设B类扩展了A(我们用这种方式创建了3个级别)。现在类B可以从类A扩展2个方法(方法a1、a2)

在C类扩展了B类之后,现在B类可以从A(我的意思是a3)扩展2个方法,下一步,我们没有什么(方法/方法)可以给其他类

public class C extends B {
    @Override
    void a1(){}
}
现在。。类A在第一次扩展中可以给出3个方法,在第二次扩展中可以给出2个方法,第三次扩展可以给出1个方法,第四次扩展可以给出0个方法

我能用java做吗

如果我们可以为限制范围向父类的方法授予不同的权限

这个答案涵盖了Java


如果您使用不同的权限询问访问权限,则允许使用覆盖方法扩大访问权限,但不能缩小访问权限

class A {
    protected void m() {}
}

class B extends A {
    @Override
    public void m() {}
}

class C extends A {
    @Override
    private void m() {} // compile error: Cannot reduce the visibility of the inherited method from A
}
正如您在类B中看到的,允许将方法
设置为公共
,但在类C中,您可以看到,不允许将方法
设置为私有


如果通过限制您询问的防止子类重写该方法的范围,您可以使该方法
成为final

class A {
    final void m() {}
}

class B extends A {
    @Override
    void m() {} // compile error: Cannot override the final method from A
}

你试过什么了吗?不,我不知道什么是做它的算法!在java中,我相信可以通过将类抽象化来实现这一点。然而,这是毫无意义的,我必须问:为什么?我不想这么做。。。只是我想知道我能不能!我认为只有抽象类不能做到这一点。你不想用抽象类来实现这一点吗?为什么不呢?是的,谢谢,但我想你还不够理解我的问题(对不起,我的英语不好!)你认为在现实世界中我们有一个父亲,在他们有父亲之前。。。在美国,一些属性从5年前就消失了:)。。。这个问题的想法。@Michael也许你应该说这就是问题所在,因为我根本不从这个问题中得到答案。但是,这些语言对类没有这样的概念,因为子类不是父类的子类。父子关系是通过组合而不是继承来完成的。类继承与人类特征继承无关,在人类特征继承中,一个孩子从父亲那里继承了一些随机特征,从母亲那里继承了一些随机特征。我猜你会感到困惑,因为我们对类继承使用了相同的术语,但事实并非如此。但我认为做一些令人惊奇的事情是一个好主意,相反,我只得到了一些否定的否决权。。。真有趣@迈克尔,我不明白重点是什么。调用方法通常意味着对类应用操作。如果一个子类想说该操作不适用于这个特定的子类,那么它可以重写该方法并抛出
UnsupportedOperationException
。如果子类希望忽略该请求,它可以重写该方法而不执行任何操作。子类决定什么是继承的,什么不是继承的。超类不能说“继承3级”。这毫无意义,因为超类不定义类层次结构,而子类定义。
class A {
    final void m() {}
}

class B extends A {
    @Override
    void m() {} // compile error: Cannot override the final method from A
}