Java 继承和访问修饰符

标签 java inheritance protected access-modifiers

我正在尝试创建一个这样的类系统:

public class Matrix {
    private int[][] m;
    public Matrix(int rows, int cols) {
        //constructor
    }
    public int get(int row, int col) {
        return m[row][col];
    }
}

public class Vector extends Matrix {
    public Vector() {
        //constructor
    }
    public int get(int index) {
        return super.get(0, index);
    }
}

我希望 Matrix.get(row, col) 函数公开,但我不希望它通过 Vector 类公开。我不希望这成为可能:

Vector v = new Vector();
int x = v.get(1, 1);

私有(private)访问修饰符对我没有帮助,因为它不会使方法在 Matrix 类之外可用(除了它的继承者)

关于如何做到这一点有什么想法吗?

最佳答案

不幸的是,这是不可能的,因为如果一个类继承了另一个类,您必须能够调用您正在继承的类的所有方法。

如果你不想这样做因为索引会越界,那么添加一个getRows()getColumns()方法到matrix 和任何拥有 Vector 实例的人都将检查以确保当他们调用 get(int row, int col) 时它不会抛出索引越界异常。

关于Java 继承和访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007152/

相关文章:

java - 如何: BitmapRegionDecoder using String pathName to the drawable directory

java - Camel 主体是用请求而不是响应设置的

c++ - 如何让子类在 C++ 中返回一个不太通用的 typedef?

java - 使用 Java 多态性限制对方法调用的访问

swift - 如何在 Swift 存储属性中创建协议(protocol)及其扩展?

java - 我如何使用混淆器?

java - 如何强制java OutputStreamWriter实际写入单个字节?

c++ - 如何解决,在使用元编程的条件基类的情况下没有成员函数 "print"

c++ - 什么是对象切片?

c++ - 策略继承和不可访问的 protected 成员