powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / вызов статического метода базового класса для наследника
9 сообщений из 9, страница 1 из 1
вызов статического метода базового класса для наследника
    #38584974
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Как можно вызвать статический метод базового класса для класса наследника?

Например код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
public class One
{ public static void main(String[] args)
	{
		Matrix myMatrix1 = Matrix.read("D:\\MyText.txt", 2, 2);
	        Vector myVector1 = Vector.read("D:\\MyText.txt", 4, 1); //ЗДЕСЬ ОШИБКА
}
}
		

class Matrix
{
	protected int[][] arr;
	
	public Matrix(int n, int m)
	{
		arr = new int[n][m];
	}

public static Matrix read(String path, int n, int m) 
	{
	
		Matrix myMatrix = new Matrix(n, m);
		try
			{
				Scanner sc = new Scanner(new File(path));
				for (int i = 0; i < n; i++)
					{
						for (int j = 0; j < m; j++)
						{
							myMatrix.arr[i][j] = sc.nextInt();
						}
					}
				sc.close();
				System.out.println("read()'s ending");
			}
		catch (Exception e)
			{
				System.out.println("Sorry, Exception");
				return myMatrix;
			}
		return myMatrix;
	}

class Vector extends Matrix {
	Vector (int n) 
	{
		super(n, 1);
	}
}



Не получается таким образом для класса наследника Vector вызвать метод родителя .read(). Как это можно сделать?

Спасибо.
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38584986
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы текст ошибок читали. Со словарём, например. У вас метод возвращает тип Matrix. Matrix это не Vector. Поэтому присвоение
Код: java
1.
Vector myVector1 = Vector.read(...)

не компилируется
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585007
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо. То есть в моем примере методы базового класса использовать не получится? Нужно свои методы писать для класса наследника с такими же именами, но другими возвращаемыми значениями?
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585025
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusТо есть в моем примере методы базового класса использовать не получится? Нужно свои методы писать для класса наследника с такими же именами, но другими возвращаемыми значениями?
Непонятно чего именно вы планируете достичь. Почему методы статические? У них полиморфизм статический, а не динамический как у виртуальных методов. Почему у вас один метод должен возвращать разные типы?
Реализовать объявление через генерики не проблема. Проблема в том что не понятно зачем оно нужно.
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585067
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо! авторУ них полиморфизм статический, а не динамический как у виртуальных методов
Кажется стало понятней.

авторПочему методы статические?

потому что у меня по заданию метод read() должен принимать параметры: n ,m, filename. Поэтому я и подумал, что матрица должна создаваться изсходя из параметров n и m. Ну а если она будет создаваться в методе, то, возможно, её метод удобней вызывать статически, чтоб перед этим не надо было создавать экземпляр класса.

авторПочему у вас один метод должен возвращать разные типы?

Получается, что если я буду использовать статические методы, то мне надо для моего наследника написать свой метод со своим возвращаемым значением, чтоб для родителя работал свой, а для наследника свой.

авторРеализовать объявление через генерики не проблема.
Сорри, не очень понял.
авторПроблема в том что не понятно зачем оно нужно.
попробывал объяснить выше.
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585097
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас проблема в том что один метод выполняет разные задачи.
read, который по-задумке читает любую матрицу, в вас ещё и создаёт её экземпляр.
Разделите создание экземпляра и непосредственно чтение по разным методам.

Выбранный дизайн предметной области тоже сомнительный.
Потому что вырожденая матрица new Matrix(n, 1) является вектором с точки зрения предметной области. Но не является им с точки зрения вашего дизайна классов. Выходит ваша модель предметной области не соответствует самой предметной области.
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585147
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
авторРазделите создание экземпляра и непосредственно чтение по разным методам.

Немного смущает то, что при таком варианте нужно писать:
Код: java
1.
2.
Matrix matrix = new Matrix(n, m);
matrix.read(filepath, n, m);



То есть получается 2 раза передаем n и m. Или так писать - нормальная правильная практика?

авторПотому что вырожденая матрица new Matrix(n, 1) является вектором с точки зрения предметной области. Но не является им с точки зрения вашего дизайна классов

более точно у меня в задаче звучит так: авторВектор – это матрица из одной колонки.
То есть мой класс vector создает матрицу с одной колонкой и n строками.

А чем является new Matrix(n, 1) с точки зрения моего дизайна?
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585158
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtusНемного смущает то, что при таком варианте нужно писать:
Код: java
1.
2.
Matrix matrix = new Matrix(n, m);
matrix.read(filepath, n, m);


То есть получается 2 раза передаем n и m. Или так писать - нормальная правильная практика?
А вас не смущает то что метод read может у поля arr взять размеры?

mr_virtusболее точно у меня в задаче звучит так: авторВектор – это матрица из одной колонки.

Это предметная область.

mr_virtusТо есть мой класс vector создает матрицу с одной колонкой и n строками.
Чем это лучше такого кода?
Код: java
1.
Matrix vector = new Matrix(n, 1);



mr_virtusА чем является new Matrix(n, 1) с точки зрения моего дизайна?
Я не знаю. Это же ваш дизайн. Вот код.
Код: java
1.
Vector v = new Matrix(n, 1);


Он не перечит предметной области. Но не работает в вашей модели предметной области.
...
Рейтинг: 0 / 0
вызов статического метода базового класса для наследника
    #38585209
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
авторА вас не смущает то что метод read может у поля arr взять размеры?

согласен, просто такое в задании условие, что read принимает размеры, поэтому и сталтак делать.

авторВот код.
Vector v = new Matrix(n, 1);

Он не перечит предметной области. Но не работает в вашей модели предметной области.

Ну да. Только, если я правильно понимаю, то можно написать в таком случае и так:
Код: java
1.
 Vector v = new Matrix(n, 5);



И экземпляр вектора тоже создастся, только колонок у него будет 5. И как в таком случае сделать проверку на количество колонок, я не знаю.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / вызов статического метода базового класса для наследника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]