概述
定义:子类与父类产生继承关系以后,会继承父类的全部操作。如果子类发现父类不足进行补充修改,但是需要保留父类属性和方法,就进行覆写。
方法覆写
方法的覆写:当子类定义了与父类方法名称相同,参数类型及个数完全相同的时候就称为覆写。
例子:
class Lianjie{
public void connect(){
System.out.println("【父类】连接所有资源");
}
}
class Lianjieshujuku extends Lianjie{
public void connect(){ //保留已有方法名称,而后进行覆写
System.out.println("【子类】连接数据库 ");
}
}
public class Jicheng{
public static void main(String args[]){
Lianjieshujuku a=new Lianjieshujuku();
a.connect();
}
}
输出结果:【子类】连接数据库
由于实例化的是子类对象,所以优先调用的是覆写以后的子类方法,如果子类没有进行方法覆写,则调用父类方法。覆写的意义在于优化父类功能。
如果在进行方法覆写之后,需要继续调用父类方法,就需要使用super.方法( )
例子:
class Lianjie{
public void connect(){
System.out.println("【父类】连接所有资源");
}
}
class Lianjieshujuku extends Lianjie{
public void connect(){ //保留已有方法名称,而后进行覆写
super.connect();//调用父类方法
System.out.println("【子类】连接数据库 ");
}
}
public class Jicheng{
public static void main(String args[]){
Lianjieshujuku a=new Lianjieshujuku();
a.connect();
}
}
输出结果:
【父类】连接所有资源
【子类】连接数据库
此时在覆写过程中调用父类方法,即输出子类覆写以后的方法,又调用了父类以前的方法。
方法覆写限制
覆写要求:覆写的方法不能拥有比父类严格的访问控制权限。
已接触过访问控制权限:public > default > private
如果父类定义了default类型,那么子类只能使用default或者public定义。如果父类定义了public,那么子类是能是public。
private既可以定义与属性也可以定义于方法,但是覆写时不使用private,例子如下:
class Lianjie{
private void connect(){
System.out.println("【父类】连接所有资源");//父类权限为private
}
public void sun(){
this.connect();
}
}
class Lianjieshujuku extends Lianjie{
//此时并不是覆写,因为父类方法不可见,覆写时不牵扯private
public void connect(){ //保留已有方法名称,而后进行覆写
System.out.println("【子类】连接数据库 ");
}
}
public class Jicheng{
public static void main(String args[]){
Lianjieshujuku a=new Lianjieshujuku();
a.sun();
}
}
输出结果:【父类】连接所有资源
此时子类对象a调用sun()方法,完全执行的是父类方法。覆写此时无效,因为父类方法为private,覆写时无法调用。
因为父类方法不可见,此时也不是覆写,如果用super调用父类方法,程序会发生错误。覆写时不牵扯private权限。
属性覆盖
定义:当子类定义了与父类相同名称的成员的时候就称为属性覆盖。
注意:
·this在使用过程中,调用的对象是当前类中的属性方法,如果当前类中没有进行覆写,则使用父类中的属性方法。所以通过this调用本类中属性进行覆写,对于覆写属性必须放在本类方法之外。
·如果对父类进行封装,则子类无法调用其属性成员,但是可以通过定义public方法返回父类属性成员,子类通过调用父类方法获得父类成员属性。
class Lianjie{
private String b="工大";
public String getInfo(){
return this.b;
}
}
class Lianjieshujuku extends Lianjie{
String b="京大";
public void sun(){
String b="州大";
System.out.println(super.getInfo());//定义普通方法返回父类b进行调用_工大
System.out.println(this.b);//调用子类中b_京大
System.out.println(b);//调用子类本方法中b_州大
}
}
public class Jicheng{
public static void main(String args[]){
Lianjieshujuku a=new Lianjieshujuku();
a.sun();
}
}
子类定义了与父类相同的属性,在方法使用过程中:
如果通过super调用属性,则优先输出父类属性值;
如果使用this调用属性,优先输出本类中的属性值;
如果直接输出属性值,则优先输出本方法中的属性值。(即最小花括号范围内的值)
最后
以上就是称心小蝴蝶为你收集整理的学习笔记——覆写(方法、属性)的全部内容,希望文章能够帮你解决学习笔记——覆写(方法、属性)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复