我一直在为OCA Java SE 8认证做准备,并且我一直在做很多的学习,最难的部分之一对我来说,一直是继承,主要是因为我开始使用PHP进行编程,所以我的编程并没有如此面向对象。不管怎样,我的问题是:Java继承 - 在派生对象中使用基本变量时,派生类重写基类方法
class MyOffice{
public static void main(String args[]){
Employee emp = new HRExecutive();
int x = emp.getInt();
System.out.println(x);
}
}
class Employee {
public String name;
String address;
protected String phoneNumber;
public float experience;
int y = 12;
/* COMMENTED CODE THAT GETS OVERRIDDEN WHEN UNCOMMENTED
public int getInt(){
System.out.println("Employee getInt");
return y;
}
*/
}
interface Interviewer{
public void conductInterview();
}
class HRExecutive extends Employee implements Interviewer{
public String[] specialization;
int elInt = 10;
public void conductInterview(){
System.out.println("HRExecutive - conducting interview");
}
public int getInt(){
System.out.println("HRExecutive getInt");
return elInt;
}
}
使用员工变量来创建一个HRExecutive对象,它不会让我达成任何HRExecutive成员,试图编译将会失败是由于没有找到符号,这使得感。
但是,当我删除注释,并在基类Employee中声明getInt()时,它会被HRExecutive的方法覆盖。它打印“HRExecutive getInt”和“10”。
如果以前的员工没有访问HRExecutive的成员,为什么在类中声明相同的方法后会被覆盖?这是我想了解的。
这就是多态性的要点。你可以在基类中声明一个方法;当代码调用该方法时,程序实际上可以运行该方法的不同实现,具体取决于对象是否实际上是该基类或其某个子类的对象。你真的应该通过一个教程来了解基本概念。 Oracle有一个[这里](https://docs.oracle.com/javase/tutorial/java/concepts/),虽然有可能更好。 – ajb