继承

超类位于子类之上,但并不意味着比子类拥有更多的功能,相反,子类比超类
拥有的功能更丰富。

override重写

  • "==" 方法名形参列表相同
  • "<=" 子类返回值类型或者异常声明小于等于父类
  • ">=" 子类访问权限大于大于等于父类

super

class Manager extends Empoyee
{
public void steBouns(double b)
 { 
 bouns=b;
 }
  public double getsalary()
  {  
   double baseSalary=super.getSalary();//调用Manager中的getSalary方法  
   return baseSalary+bouns;
  }
private double bouns;
}

super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个提示编译器调用超类方法的特有关键字

子类可以添加域,添加方法,覆盖超类的方法,不能删除继承的超类的任何方法和域。

super在构造器中的应用

public Manager(Sting n, double s, int year, int month, int day)
{
 super(n, s, year, month, day);//调用超类Employee中含有n,s,year, month, da的y构造器
 bouns=0;
}

Reason:

   由于Manager类的构造器不能访问Employee类的私有域,所以必须利用Employee的构造器对这部分私有域进行初始化,通过super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一条语句。
      如果没有调用,子类将自动调用超类的无参构造器,如果超类没有,那么编译器将会报错

总结

this关键字:1.引用隐式参数
            2.调用该类的其他构造器
super关键字:1.调用超类方法
             2.调用超类的构造器

调用构造器语句必须作为第一句出现,构造器参数既能传递给本类的其他构造器(this),也能传递给子类的构造器(super)

import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 
 * @author asus
 *
 */
public class ManagerTest{
	public static void main(String[] args) 
	{   Manager boss=new Manager("Cheng",80000,1987,1,1);
		boss.setBonus(5000);
		Employee[] staff =new Employee[3];
		
		
		staff[0]=boss;
		staff[1]=new Employee("cindy",2000,2018,10,1);
		staff[2]=new Employee("paul",3000,2018,10,1);
	for(Employee e:staff) {
		e.raiseSalary(5);//将e的salary域值增加5%,即double raise=e.salary*5/100;e.salary+=raise;
	}
	for (Employee e:staff) {
		System.out.println("name="+e.getName()+"slary="+e.getSalary()+"\n"+"hireday="+e.getHireDay());
	}
	
	}
}
	
	class Employee{
		public Employee(String n,double s,int year,int month,int day) 
		{   
			name =n;
			salary=s;
			GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
			hireDay=calendar.getTime();
		}
	public String getName() { 
		return name;
	}
	public double getSalary() { 
		return salary;
	}
	
	public Date getHireDay() { 
		return (Date)hireDay.clone();
	}
	/*方法用于操作对象以及存取它们的实例域。将调用这个方法的对象的salary实例域设置为新值。*/
	public void raiseSalary(double byPercent) { 
		  double raise=this.salary*byPercent/100;//this表示隐式参数  
		  this.salary+=raise;
	}
	
	private String name;
	private double salary;
	private Date hireDay;
	
	
	}	
	class Manager extends Employee{
		public Manager(String n,double s,int year,int month,int day) {
			super(n,s,year,month,day);
			bonus=0;
		}
		public double getSalary() {
			double baseSalary=super.getSalary();
			return baseSalary+bonus;
		}
		public void setBonus(double b) {
			bonus=b;
		}
	    private double bonus;
	}

    e虽然声明为Employee类型,但实际上e既可以引用Employee类型的对象,调用Employee类中的getSalary方法; 也可以引用Manager类型的对象,调用Manager类中的getSalary方法。
    一个对象变量(e)可以引用多种实际类型的现象被称为多态。在运行时能够自动选择调用哪个方法的现象称为动态绑定。


继承层次

     继承并不仅限于一个层次,例如,Manager类可以派生出Executive类,由一个公共超级类派生出的所有类的集合称为继承层次,从某个特定的类到其祖先的路径被称为该类的继承链。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值