Java基础:第三十七讲 成员方法的继承与覆盖

成员方法的继承与覆盖与成员变量的继承与覆盖类似,但有区别。

类似在于可以继承的成员变量和成员方法的类型是相同的,可以继父类的public和protected成员方法。

区别在于成员方法是真的覆盖,定义与父类相同的方法之后,在父类中相同的方法在子类中是不存在的。

首先要确定什么是相同的方法?相同的方法指的是:方法名相同、参数个数相同、参数类型相同、返回值类型。与参数的名字无关。

例如,下面的方法是相同的方法:

public void setAge(int age){...}

public void  setAge(int sage){...}

下面的方法是不同的方法:

public void setAge(int age){...}

public void setAge(String age){...}

注意:子类在覆盖父类的方法的时候,不能修改返回值类型,不能缩小访问权限,下面的两种方式都是错误的。

 父类中:

   public int getA(){
     return a;
    }

子类中:

    protected int getA(){   // 缩小了访问权限
     return a;
    }

    public String getA(){   // 修改了返回值类型
     return String.valueOf(a);
    }

方法用于定义行为,方法的覆盖是子类修改了父类中该行为的实现方式。方法的覆盖与多态有关。

如果方法没有覆盖,会直接继承,如果被覆盖,父类的该方法在子类中就不存在了。

下面这道题,会是什么结果呢?

package test;

public class Parent {
    public int a=10;
    public int getA(){
     return a;
    }
}

package test;

public class Child extends Parent{
    public int a=20;
    public int getParentA(){
     return super.a;
    }
    public int getChildA(){
     return a;
    }
}

package test;

public class Test {
    public static void main(String args[]){

        Child child = new Child();
       
        System.out.println(((Parent)child).a);
       
        System.out.println(child.getParentA());
        System.out.println(child.getChildA());
        System.out.println(child.getA());

 }

}

查看运行结果:

10
10
20
10

请注意最后一个。

李绪成 CSDN Blog: http://blog.csdn.net/javaeeteacher

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值