java 重载和重写区别

来源:互联网 发布:linux mutex 实现原理 编辑:程序博客网 时间:2024/05/18 09:06

重载改变的是参数个数,参数的类型但不改变参数的顺序,与返回值无关

例如

1.public void get(){}

2.public void get(int a){}//参数个数不同

3.public void get(int a,int b)//参数个数不同

4.public void get(int a,double b){}//参数个数和参数类型

5.public int get(int a,double b){}//返回值类型为int不同,不为4的重载,但为1,2,3的重载

下面为继承重载

public class A {
public int getA()
{
return 4;
}


}

public class B extends A {
public int  getA(int a)
{
return a;
}
public static void main(String[] args) {
A a=new A();
System.out.println(a.getA());
B b=new B();
System.out.println(b.getA());
}


}

发生继承重载,这需要注意,因为B继承父类A的方法,B类重载了getA(),注意此类的情况



重写与继承相关

重写必须与父类方法一致,包括返回值类型,类型,参数,,子类和父类方法除了返回值大小不同,其他的一模一样

例子如下

public class A {
public int getA()
{
return 4;
}


}

public class B extends A {
public int  getA()
{
return 5;
}
public static void main(String[] args) {
A a=new A();
System.out.println(a.getA());
B b=new B();
System.out.println(b.getA());
}


}

输出5,4

总结

父类调用父类的方法

子类调用子类覆盖父类的方法

如果没有覆盖

则调用父类的方法

返回值或者参数列表不同则不为重写

附:重写要注意权限问题.

2,向上转型复写问题

向上转型

public class A {
public int getA()
{
return 4;
}


}

public class B extends A {
public int  getA()
{
return 5;
}
public static void main(String[] args) {
A a=new B();
System.out.println(a.getA());
}


}

子类向上转型,父类引用指向子类对象,调用子类复写父类的方法

如果子类不复写父类的方法,则调用父类的方法,子类扩展的所有方法丢失






0 0
原创粉丝点击