powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п.
20 сообщений из 70, страница 3 из 3
задача о персонале с фикс и повременной з.п.
    #39339677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81 таким образом в "e" будут доступны только методы которые есть в "e" .
без указания компилятору что преобразуем тип (по простому) - все какие есть в e, но вызван будет из старшей матрёшки.
(Blazkowicz написал).
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339691
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81финт ушами мне пока рано .
спасибо участникам за помощь и терпение
Ну, по-моему это важно для понимания.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339692
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123без указания компилятору что преобразуем тип (по простому)


то есть ? поясните
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339693
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
((FixedPriceEmployee) e).runFixedPriceEmployeeSpecificMethod(); //Вызвали метод конкретного типа


А разве не метод описанный в конкретном типе?
(Если конечно приведение типов состоится)
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339697
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевА разве не метод описанный в конкретном типе?

Ну, я пытаюсь объяснить по простому, а не быть академически точным.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339705
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81финт ушами мне пока рано .
На самом деле с него и надо начинать.
Виртуальные методы это способ позднего связывания.
Рассматривай класс, как табличку ссылок, слева как называется (и общее описание, вроде того, что передать методу и какого типа результат), справа, что подразумевается.
При наследовании можно (не всегда правда) менять содержимое правого столбца и добавлять строки.
Приведение типа к предку выглядит, как шаблон с вырезанными дырками в местах, где были описания у предка. При наложении шаблона, мы видим только то, где дырки. Но правый столбец тот, что создан у потомка.

Если привести назад к типу потомка (заменить шаблон), то увидим то, что есть у потомка.

При этом предка привести к потомку не получится - у него на против добавленных строк ничего нет.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339719
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123без указания компилятору что преобразуем тип (по простому)

то есть ? поясните
Blazkowicz же последней строкой написал пример.
- компилятор (IDE) тупой, и без указания автоматом подбирает самый старший наследник. Логично?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339724
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
да . только непонятно зачем это надо.
Если я верно понимаю в этом случае мы отказываемся от полиморфизма ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123,
да . только непонятно зачем это надо.
Если я верно понимаю в этом случае мы отказываемся от полиморфизма ?
Да.
И на твоём этапе это не надо. Иди по цели топика . Иначе никогда не дойдёшь до версии 1.0.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339735
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

может быть это понадобится, когда у нас такое построение классов : предок - > наследник1 -> наследник2 ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339746
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123,
может быть это понадобится, когда у нас такое построение классов : предок - > наследник1 -> наследник2 ?
откроешь другой топик. Там море ньюансов. И задачу реальную надо придумать).
Удачи!
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340141
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё же странно себя ведёт массив из классов )))

Код: java
1.
2.
3.
4.
5.
6.
		employee[] employees = new employee[10];
		
		employees[0] = new FixedPriceEmployee(1, "Маша", 25000);
		employees[1] = new Timed(2, "Коля", 14);
		employees[2] = new Timed(2, "Петя", 14);
		System.out.println(employees[1].getName()  );



здесь хотелось бы видеть "Коля" , а выводит "Петя".


Код: 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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
package persony;

import java.util.ArrayList;

public class main  {
	public static void main(String args[]) {

		
		
		employee[] employees = new employee[10];
		
		employees[0] = new FixedPriceEmployee(1, "Маша", 25000);
		employees[1] = new Timed(2, "Коля", 14);
		employees[2] = new Timed(2, "Петя", 14);
		System.out.println(employees[1].getName()  );
		
			}

}


package persony;



abstract class employee {
	
	 
	
	abstract  double Get_Salary(float s) ;

	abstract  String getName() ;

	
	
}


package persony;

public class Timed extends employee {
	
	 private static String name ;
	 private static int id ;
	 private static int time ;
	 private double salary ;
	 

	 public Timed(int i, String name, int time) {
		
			this.setName(name);
			this.time = time;
			
	}




	public  String getName() {
		return name;
	}

	public static void setName(String name) {
		Timed.name = name;
	}




	@Override
	double Get_Salary(float s) {
		// TODO Auto-generated method stub
		return 0;
	}



	
	 

	
}

package persony;

public class FixedPriceEmployee extends employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name=name;
	}



/*
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}
*/

	public String getName() {
		return name;
	}



	public static void setName(String name) {
		FixedPriceEmployee.name = name;
	}



	@Override
	double Get_Salary(float s) {
		// TODO Auto-generated method stub
		return 0;
	}


	 
}
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
не делай больше одной пустой строки.
Самое время пройтись пошаговой отладкой самому и выяснить вопрос.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340161
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно выясните отличие static поля от не static.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340162
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81всё же странно себя ведёт массив из классов )))
Осталось понять кто и зачем в этом коде написал ключевое слово static.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340174
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ок. все советы учту
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340373
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

понятно. исходя из подсказок вывод: сделал жесткое поле Name значение которого таскается постоянно, все экземпляры ссылаются на то что было присвоено. короче для каждого экземпляра не создаётся Name. а надо бы динамическим это поле.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340376
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

короче static для полиморфизма зло судя по всему
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340379
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81короче static для полиморфизма зло судя по всему
Существует статический полиморфизм. И вообще разные его проявления.
http://stackoverflow.com/questions/20783266/what-is-the-difference-between-dynamic-and-static-polymorphism-in-java
http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
Хотя в большинстве случаев под полиморфизмом понимают именно виртуальные методы.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39341036
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попинать, с точки зрения ООП и не только.
:)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package pers;

abstract class Employee{
	abstract  String getName();
	abstract void setName(String name); 
	abstract void setSalary(double salary) ;
	abstract double getSalary();
	abstract String getType();
}



Код: 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.
50.
package pers;


public class Timed extends Employee {
	
	private String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/
	 public int jjjj; 
	


	 public Timed(int i, String name, double salary )  {
		 //System.out.println(name);
		 	this.salary = salary;
			this.name=name;
	
	}



	@Override
	double getSalary() {

		 return 20.8 * 8 * salary;
	}
	@Override
	String getType() {
		return "Timed";
	}

	@Override
	String getName() {

		return this.name;
	}



	@Override
	void setName(String name) {
		this.name = name;
	}

	@Override
	void setSalary(double salary) {
		// TODO Auto-generated method stub
		
	}

}




Код: 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.
package pers;

public class FixedPriceEmployee  extends Employee {
	 private String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/
	 public int jjjj; 	
	 public FixedPriceEmployee(int i, String name, double salary )  {	
		 //System.out.println(name);
		 	this.setSalary(salary);
		 	this.name=name;
	}
	@Override
	double getSalary() {
	
		 return salary;
	}
	@Override
	String getName() {
		//JOptionPane.showMessageDialog(null,  this.name);
		return this.name;
	}
	@Override
	void setName(String name) {
		this.name = name;
	}

	@Override
	void setSalary(double salary) {
		this.salary = salary;
	}
	@Override
	 String getType() {
		return "FixedPriceEmployee";
	}
}



Код: 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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
package pers;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Operations_employee {
	private Employee[] e1;
	private int len;
	private Scanner scn;
	private String filename;
	 
	 public String getName( int i) {
		 return e1[i].getName();
		 }
	 
	 public double getSalary( int i) {
		 return e1[i].getSalary();
		 }
	 public String getType( int i) {
		 return e1[i].getType();
		 }
	 
	 public Operations_employee (String fn) {
		 this.filename=fn;
		 this.len = GetRowQtyInFile();		
		e1 = new Employee[len] ;				
		openfile();
		readfile();				
	 }	 
	 public int GetRowQtyInFile() {
		 /*считает кол-во строк в файле(проще способа я не нашёл по средствам сканера тоже не пойму как сделать )*/
		 int lineNumber = 0;
	 try{
		 File myFile =new File(filename); 
		FileReader fileReader = new FileReader(myFile);
		 LineNumberReader lineNumberReader = new LineNumberReader(fileReader);		  		  
		 while (lineNumberReader.readLine() != null){
		 lineNumber++;
		 }		  		  
		 lineNumberReader.close();		
		 }catch(IOException e){
		 e.printStackTrace();
		 }
	 return lineNumber;
	 }	 	 
	 public void openfile() {
		 /*открывает файл*/
		 try {
			 scn = new Scanner (new File(filename));	 
		 } catch(Exception e) {JOptionPane.showMessageDialog(null, "Файл не найден");}
		}	 
	 public void readfile() {
		 /*читает файл*/
		 String n; /*тут будет прочитано ниже ID - служащего*/
		 String type; /*тут будет прочитано тип зар. платы - служащего (на окладе/повременщик)*/
		 String s; /*имя служащего*/
		 String sal; /*тут будет зар. плата в случае служащего с окладом или время в случае повременщика */ 				 		
		    for (int row=0;row<len-1;row++ ) {		    	  
		    	n=scn.next();
		    	type=scn.next();
		    	s=scn.next();		    	
		    	sal=scn.next();
	if (type.equals("t")) {e1[row] = new Timed(  Integer.parseInt(n) , s,  Float.parseFloat(sal));}
	if (type.equals("f")) { e1[row] = new FixedPriceEmployee(  Integer.parseInt(n) , s,  Float.parseFloat(sal));}		    	
		 }
	 }
	 public void change_elements(int i, int j) {
		 /*меняет элементы массива местами*/
		 Employee e10;
		 
		 	e10=e1[i];
		 	e1[i]=e1[j];
		 	e1[j]=e10;
	 }
	 public void view_all_elements() {
		 /*вывод элементов массива */
		 for (int i = 0; i <= len-1; i++) {
			 if (i<=len-2) {System.out.print(i) ;System.out.print(e1[i].getName()+" "+e1[i].getType()+" "+e1[i].getSalary());}
			  System.out.println();
			} 
	 }
	 public void sort_elements() {
		 /*сортировка пузырьком*/
		int k=len-2;
		for (int j = 0; j <= len-2; j++) {
					 for (int i = 0; i <= k; i++) {
			 if (i+1<=len-2) { 
			 if (e1[i].getSalary()<e1[i+1].getSalary()) {change_elements(i, i+1);}
			 }
			} k--;
		}
		/*сортировка по именам в алфавитном порядке в элементах с одинаковой зар. платой */
		k=len-2;
		for (int j = 0; j <= len-2; j++) {
			for ( int i = 0; i <= k; i++) {
			 if (i+1<=len-2) { 
			 if ((e1[i].getSalary()==e1[i+1].getSalary()) && e1[i].getName().compareTo(e1[i+1].getName())   >0 ) {change_elements(i, i+1);}
			 }
			} k--;
		}
	 }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package pers;
import javax.swing.JOptionPane;
public class Main  {
	public static void main(String args[]) {
		Operations_employee o = new Operations_employee("res//test.txt");		
		o.view_all_elements();
		 System.out.println();
		o.sort_elements();
		o.view_all_elements();              
			}
}
...
Рейтинг: 0 / 0
20 сообщений из 70, страница 3 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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