2016-04-30 37 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 

这将是更好,如果这些类不使用getter和setter方法


Upd

例如,我有这个类

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

而且我要手柄()(或类似的东西),改造后的工作

注意lastConferenceName()和GetHashCode()是在不同的组

+0

您可以使用这些方法创建接口,然后让'Student'实现它们。 – markspace

+0

我希望学生班更小。我不想在学生类中实现所有的方法 – PolyProgrammist

+0

如果你想访问它们,你必须使它们的访问范围受到保护或公开。我将添加一个代码.. –

回答

0

从每个子类中延伸Student类。

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

请参阅upd – PolyProgrammist