2016-04-30 2 views
0
  1. У меня есть класс, который содержит много защищенных членов данных и множество групп различных функций, которые обрабатывают эти элементы данных.
  2. Я хочу отделить этот класс от подклассов, чтобы разные группы методов были в разных подклассах.

1.I имеет этого классОтдельные методы класса по группам в Java

class Student { 
    protected String name; 
    protected int courseNumber; 
    protected TreeMap<String, Integer> marks; 
    protected double successRate; 
    protected Pair<String, Integer>[] conferences; //name, place 


    void setName(String name) { this.name = name; } 
    //... setters 
    String getName() { return name; } 
    //... getters 

    //...constructors 

    int getHashCode() { 
     int res = 0; 
     //... 
     return res; 
    } 
    boolean less (Student b) { 
     boolean ls = false; 
     //... 
     return ls; 
    } 
    //... functions to compare objects 

    String lastConferenceName() { 
     return conferences[conferences.length - 1].getKey(); 
    } 
    //... some last data 

    double marksMedium(String[] s) { 
     int res = 0; 
     for (int i = 0; i < s.length; i++) 
      res += marks.get(s[i]); 
     return (double) res/s.length; 
    } 
    //... some medium functions 

    //... some group of functions 

    //... some other groups 
} 

Я хочу сделать что-то вроде этого

class Student{ 
    protected String name; 
    protected int courseNumber; 
    protected TreeMap<String, Integer> marks; 
    protected double successRate; 
    protected Pair<String, Integer>[] conferences; //name, place 


    void setName(String name) { this.name = name; } 
    //... setters 
    String getName() { return name; } 
    //... getters 

    //...constructors 
} 

class StudentComparator{ 
    int getHashCode() { 
     int res = 0; 
     //... 
     return res; 
    } 
    boolean less (Student b) { 
     boolean ls = false; 
     //... 
     return ls; 
    } 
    //... functions to compare objects 
} 
class LastStudentInfoGetter{ 
    String lastConferenceName() { 
     return conferences[conferences.length - 1].getKey(); 
    } 
    //... some last data 
} 
class StudentMediumGetter{ 
    double marksMedium(String[] s) { 
     int res = 0; 
     for (int i = 0; i < s.length; i++) 
      res += marks.get(s[i]); 
     return (double) res/s.length; 
    } 
    //... some medium functions 
} 
class SomeStudentFunctions{ 
    //... some group of functions 
} 
///... SomeOtherClasses 

Было бы лучше, если эти классы не используют сеттер и добытчик


Обновление

Например, у меня есть этот класс

class Handler{ 
    void handle(){ 
     Student s = new Student(); 
     ///////........ 
     System.out.println(s.lastConferenceName()); 
     System.out.println(s.getHashCode()); 
    } 
} 

И я хочу ручку() (или что-то подобное), чтобы работать после трансформации

Обратите внимание, что lastConferenceName() и GetHashCode() находятся в разных группах

+0

Вы можете установить интерфейсы с этими методами, а затем выполнить «Студент». – markspace

+0

Я хочу, чтобы класс учеников был меньше. Я не хочу реализовывать все методы в классе Student – PolyProgrammist

+0

Если вы хотите получить к ним доступ, вы сделаете свою область доступа защищенной или общедоступной. Я добавлю код .. –

ответ

0

Расширяет класс ученика как следует из каждого вашего подкласса.

public class Student { 
    private String name; 
    private int courseNumber; 
    protected TreeMap<String, Integer> marks; 
    private double successRate; 
// protected Pair<String, Integer>[] conferences; // name, place 

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

    // ... setters 
    public String getName() { 
     return name; 
    } 
    // ... getters 

    // ...constructors 
} 

class StudentComparator extends Student{ 
    public int getHashCode() { 
     int res = 0; 
     // ... 
     return res; 
    } 

    public boolean less(Student b) { 
     boolean ls = false; 
     // ... 
     return ls; 
    } 
    // ... functions to compare objects 
} 


class StudentMediumGetter extends Student { 
    double marksMedium(String[] s) { 
     int res = 0; 
     for (int i = 0; i < s.length; i++) 
      res += marks.get(s[i]); 
     return (double) res/s.length; 
    } 
    // ... some medium functions 
} 

class SomeStudentFunctions extends Student { 
    // ... some group of functions 
} 
+0

Если я так делаю, я не могу получить доступ к другим методам. Мне нужны все методы Студента. – PolyProgrammist

+0

Когда вы подклассифицированы, вы не можете получить доступ к каким-либо частным членам суперкласса. Поэтому вы должны сделать их как минимум защищенными. –

+0

см. Обновление, пожалуйста – PolyProgrammist

Смежные вопросы