“一个类中若有抽象方法,则这个类必为抽象类”
为什么不能是接口呢
一般来说抽象方法是用来说抽象类的,而接口的方法一般不叫抽象方法而叫方法存根。当然这只是一种习惯叫法。
这句话我不知道从哪里说得,我跟人理解
严谨的话从定义上讲:在Java中,接口可以理解成为一种特殊的抽象类,它定义了一组方法的规范,但没有具体的实现。但注意接口和抽象类是完全不一样的,因为一个是interface,一个是class 。接口类可以实现一个或多个接口;但是抽象类不同。这句话是通的,因为说的是类中有抽象方法。
class Solution {
public:
int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {
int m = maze.size();
int n = maze[0].size();
// 上下左右四个相邻坐标对应的行列变化量
vector<int> dx = {1, 0, -1, 0};
vector<int> dy = {0, 1, 0, -1};
queue<tuple<int, int, int>> q;
// 入口加入队列并修改为墙
q.emplace(entrance[0], entrance[1], 0);
maze[entrance[0]][entrance[1]] = '+';
while (!q.empty()){
auto [cx, cy, d] = q.front();
q.pop();
// 遍历四个方向相邻坐标
for (int k = 0; k < 4; ++k){
int nx = cx + dx[k];
int ny = cy + dy[k];
// 新坐标合法且不为墙
if (nx >= 0 && nx < m && ny >= 0 && ny < n && maze[nx][ny] == '.'){
if (nx == 0 || nx == m - 1 || ny == 0 || ny == n - 1){
// 新坐标为出口,返回距离作为答案
return d + 1;
}
// 新坐标为空格子且不为出口,修改为墙并加入队列
maze[nx][ny] = '+';
q.emplace(nx, ny, d + 1);
}
}
}
// 不存在到出口的路径,返回 -1
return -1;
}
};
class Solution:
def nearestExit(self, maze: List[List[str]], entrance: List[int]) -> int:
m, n = len(maze), len(maze[0])
# 上下左右四个相邻坐标对应的行列变化量
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
# 入口加入队列并修改为墙
q = deque([(entrance[0], entrance[1], 0)])
maze[entrance[0]][entrance[1]] = '+'
while q:
cx, cy, d = q.popleft()
# 遍历四个方向相邻坐标
for k in range(4):
nx = cx + dx[k]
ny = cy + dy[k]
if 0 <= nx < m and 0 <= ny < n and maze[nx][ny] == '.':
# 新坐标合法且不为墙
if nx == 0 or nx == m - 1 or ny == 0 or ny == n - 1:
# 新坐标为出口,返回距离作为答案
return d + 1
# 新坐标为空格子且不为出口,修改为墙并加入队列
maze[nx][ny] = '+'
q.append((nx, ny, d + 1))
# 不存在到出口的路径,返回 -1
return -1