Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / вызов статического метода базового класса для наследника / 9 сообщений из 9, страница 1 из 1
13.03.2014, 12:22
    #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
13.03.2014, 12:30
    #38584986
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов статического метода базового класса для наследника
Вы бы текст ошибок читали. Со словарём, например. У вас метод возвращает тип Matrix. Matrix это не Vector. Поэтому присвоение
Код: java
1.
Vector myVector1 = Vector.read(...)

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

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

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

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

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

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

Выбранный дизайн предметной области тоже сомнительный.
Потому что вырожденая матрица new Matrix(n, 1) является вектором с точки зрения предметной области. Но не является им с точки зрения вашего дизайна классов. Выходит ваша модель предметной области не соответствует самой предметной области.
...
Рейтинг: 0 / 0
13.03.2014, 13:51
    #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
13.03.2014, 13:57
    #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
13.03.2014, 14:32
    #38585209
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вызов статического метода базового класса для наследника
Blazkowicz,
авторА вас не смущает то что метод read может у поля arr взять размеры?

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

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

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

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



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


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