JAVA中覆盖与重载

覆盖的规则是:
(1)参数必须要一样,且返回类型必须要兼容;
(2)不能降低方法的存取权限。
方法重载的规则:
(1)返回类型可以不同;
(2)不能只改变返回类型;
如果只有返回类型不同,但参数一样,这是不允许的。
(3)可以更改存取权限。

下面的例子是关于覆盖的,需要注意的是A a2=new C()这个语句。A a2这个部分是声明一个引用变量a2;new C()是创建一个C类的对象;
A a2=new C();就是将新的C赋值给a2这个引用变量。
关于这个C类,它的继承自B,B继承自A,所以C类继承了A和B拥有的变量和方法,当C中出现了B或者A中同名方法时,会覆盖掉B或者A中的方法。具体分析:(1)a2.m1();由于C类中没有m1这个方法,于是编译器就去查看它的父类B,发现B中有m1这个方法,于是执行该方法。(2)a2.m2();由于C类中没有m2这个方法,于是编译器就去查看它的父类B,发现B中也没有m2这个方法,于是编译器去查找B的父类方法A,发现A中有m2这个方法,于是执行该方法。(3)a2.m3();由于C类中有m3这个方法,于是编译器就直接执行C类中的这个m3方法。

package com.util.extend;
public class ExtendExamp
{
    public static void main(String[] args)
    {
        A a = new A();
        B b = new B();
        C c = new C();
        A a2 = new C();
        a2.m1();
        a2.m2();
        a2.m3();
    }
}

class A
{
    int var=7;
    void m1()
    {
        System.out.println("A'S m1, ");
    }
    void m2()
    {
        System.out.println("A'S m2, ");
    }
    void m3()
    {
        System.out.println("A'S m3, ");
    }

}

class B extends A
{
    void m1()
    {
        System.out.println("B's m1, ");
    }
}

class C extends B
{
    void m3()
    {
        System.out.println("C's m3, "+(var+6));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值