第五章 继承和多态相关问题研究
1. super和this关键字的使用问题
public class Manager extends Employ {
public int getSlary(){
return (super.getSlary()+2000);
}
public static void main(String[] args){
Manager boss=new Manager();
System.out.println(boss.getSlary());
}
}
class Employ{
public int getSlary(){
return 3000;
}
}
在使用super关键字中我们调用了超类中的getSlary()方法,并没有调用子类中的方法,如果不加super,方法会无限调用自身,知道程序崩溃。
2. super在构造器中的使用
public Manager(String name,int Salary){
super(String name,int Salary);
}
super(String name,int Salary);是调用超类中构造器的简写形式。
多态
1. 可以将自类中的变量值赋值给超类中的变量
Employ e;
e=new Employ();//e引用Elemploy对象
e=new Manager();//e引用Elemploy子类的对象
2. 继承中的置换法则
Manager boss=new boss("zhangming",1888,8,8);
Elemploy e=boss;
在这个例子中boss和e引用的是同一个对象,但编译器将e看成Elemploy对象,这意味着e不能调用boss中的内容,即不能调用子类中的成员方法。
3.动态绑定
class Elemploy{
private String name;
private int year;
private int month;
private int day;
private String id="employ";
public Elemploy(String name,int year,int month,int day){
this.name=name;
this.year=year;
this.month=month;
this.day=day;
}
public void putid(String id){
this.id=id;
}
public void display()
{
System.out.println("name: "+name+"year: "+year+"month: "+month+"day: "+day+"ID: "+id);
}
}
class manager extends Elemploy{
public manager(String name,int year,int month,int day){
super(name,year,month, day);
super.putid("boss");
}
}
public static void main(String[] args){
Manager boss=new Manager();
manager b= boss.new manager("zhang",1,2,3);
b.display();
Elemploy e=boss.new Elemploy("tai",1,2,4);
e.display();
e.display();
}
}