在引用超类时,是否有使用子类方法的方法



我创建了一个类似于的Student类

public class Student {
protected String name;
protected String surName;
protected long id;
protected String email; 
}

public interface IGraduated {
public void doSmth();
}

public class GraduatedStudent extends Student implements IGraduated{
private String companyInfo;
private double salaryInfo;
@Override
public void doSmth() {
System.out.println(this.name + " is working on the " + this.companyInfo);
}

我希望doSmth方法是专门针对研究生的。所以我把它分离成一个接口。

我想这样使用,我知道这是不可能的,也不适合oop设计。但是在这种情况下我能做些什么吗?

Student stu = new GraduatedStudent();
stu.doSmth();

我在这里可能错了,但如果你不明确需要接口,我就不会为你的结局走这条路。

我不想使用接口只声明一个特定于一个类的方法,而是简单地在子类中声明该方法,然后从那里开始:

public class Student {
private String name;
private String surName;
private long id;
private String email; 
private bool hasGraduated;

public Student(){
...
}
public void GraduationDay {
if(hasGratudated){
GratuatedStudent gratStudent = new GratuatedStudent(//studentInfos + job + salary);
gratStudent.doSmtg();
}
}
}

public class GraduatedStudent extends Student {
private String name;
private String surName;
private long id;
private String email; 
private String companyInfo;
private double salaryInfo;

public GratuatedStudent(){
...
}
public void doSmth() {
System.out.println(this.name + " is working on the " + this.companyInfo);
}
}

我知道它可以优化,但重要的是总的想法。当你有(或者你知道你会有(多个具有相似方法的类时,应该使用接口。你的逻辑中没有什么必然是错误的,但对于你需要完成的事情来说,它有点太复杂了。

此外,我知道并不是每个人都这么认为,但尽量只在必要时使用受保护的。它可能会在代码中打开漏洞(某些类/方法能够更改这些变量的值(。

最新更新