Java重载,继承,覆盖

一,重载

  1. 重载含义
  • 对一个方法多次定义,即方法名相同,输入参数不同;
  • 输入参数不同:参数数量不同/参数类型不同/参数次序不同(次序不同前提是有不同的数据类型,不然次序无意义);
  • 重载对所有的成员方法都适用(包括构造方法,但不包括finalize方法);
  1. 重载使用技巧
  • 当重载一个构造方法时,首先要提供一个尽可能普通的版本(输入参数最全面的版本),其他版本可使用this(参数)方式调用该版本的构造方法,取代默认的参数;
  • 如果在其他构造方法中调用普通版的构造方法,这个调用语句必须作为这个方法的第一条语句;
  • 例如:
public Student(String _name, double _GPA){    //最普通版本构造方法--有name,有GPA
	name=_name;
	GPA=_GPA;
}
public Student(){			          //this(参数)调用版--无name,无GPA	
	this("nobody",     -1.0);
}
public Student(String _name){			 //this(参数)调用版--有name,无GPA	
	this(_name,-1.0);
}
public Student(double _GPA){			 //this(参数)调用版--无name,有GPA	
	this("nobody",_GPA);
}

二,继承

  1. 继承说明
  • 在子类的构造方法的第一行,可以使用super(参数)来引用父类的构造函数;
  • 当一个类被实例化时,它的构造方法自动被调用,当一个子类被实例化的时候,虽然没有加入任何调用构造函数的语句,但子类的构造方法和超类的构造方法都被自动的调用;
  • 当子类被调用的时候,要隐含地调用超类的构造方法,这种情况下,没有为构造方法输入任何参数;如果超类没有无参数的构造方法,子类又不明确的调用超类的构造方法,则编译器将无法编译子类;
  • 除了隐含调用父类构造函数,也可以在子类的第一行明确的调用超类的构造方法;
  • 假如某个类含有finalize方法,而另一个自带finalize方法的类扩展了它,当子类的finalize方法结束后,将自动地调用超类的finalize方法;
  1. 继承使用技巧
  • 由于子类在不明确指明的情况下,会隐含调用父类的构造方法,而且该调用不带输入参数,所以当父类中并没有无输入参数的构造方法时,则子类的隐含调用就会出现编译错误;对此,常有如下两种使用继承的技巧:
  • 第一种(不使用隐含调用,直接第一句明确调用):每个子类都应当明确地调用超类的一个构造方法,而且必须在第一行调用,当然前提是该调用必须保证超类中有对应的构造方法;
  • 第二种(使用隐含调用,但父类要提供无参构造方法):为每个可能成为超类的类提供一个无参构造方法,如果还有其他需要,则重载构造方法;

三,覆盖

  1. 覆盖含义
  • 子类对父类成员方法或成员变量重新定义,覆盖原来的定义;
  • 如果重定义的方法的参数列表与超类中该方法的参数列表不一致,叫做重载,而不叫覆盖;即参数列表必须与超类的一致;
  • 覆盖成员方法和成员变量都可以在子类中通过super和圆点操作符来实现;
  1. 覆盖基本规则
  • 覆盖方法的返回类型必须同它所覆盖的方法相同;
  • 覆盖方法不能比它覆盖的方法的访问性差;
  • 覆盖方法不能比它所覆盖的方法抛出更多的异常;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值