0%

Java笔记——继承与覆盖(二)

简单记录一下Java的重写与重载(/ω\)。

重写

Java重写是在子类中定义方法,其与父类某方法的命名、参数列表和返回类型完全相同。重写的好处在于子类可以根据需要,定义特定于自己的方法。

重写的规则

  • 参数列表(参数个数、参数顺序)、返回值类型必须与被重写的方法完全相同;
  • 访问级别不能比父类中被重写的方法有更严格的限制;
  • 父类的方法只能被其子类重写;
  • 声明为final的方法不能被重写;
  • 声明为static的方法不能被重写,但能被再次声明;
  • 当子类和父类在同一个包中时,子类可以重写父类除了声明为privatefinal外的所有方法;
  • 当子类和父类不在同一个包中时,子类只能重写父类声明为publicprotected的方法;
  • 如果不能继承一个方法,则不能重写这个方法;
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常;但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以;
  • 构造方法不能被重写。

举个栗子

class demo0
{
public int tags()
{
System.out.println("demo0");
return 0;
}
}
class demo1 extends demo0
{
public int tags()
{
System.out.println("demo1");
return 1;
}
}
public class Override0
{
public static void main(String[] args)
{
demo0 d0=new demo0();
demo1 d1=new demo1();
d0.tags();
d1.tags();
}
}

运行结果:

demo0
demo1

关键字super

当需要在子类中调用父类的被重写的方法时,就要使用关键字super

class demo0
{
public void tags()
{
System.out.println("demo0");
}
}
class demo1 extends demo0
{
public void tags()
{
System.out.println("demo1");
super.tags();
}
}
public class Override1
{
public static void main(String[] args)
{
demo1 d1=new demo1();
d1.tags();
}
}

运行结果:

demo1
demo0

重载

Java重载就是使类以相同的方法处理不同的参数,其在一个类中,方法名字相同,而参数列表不同,返回值可以相同也可不同。

重载的规则

  • 方法的参数列表(参数个数、参数顺序)必须不同;
  • 方法的返回值类型可以相同也可不同;
  • 方法可以改变访问修饰符;
  • 方法能在同一个类或在一个子类中被重载;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 不能以返回值类型作为重载的标准。

举个栗子

public class Overload
{
public int demo()
{
System.out.println("demo0");
return 0;
}
public void demo(int x)
{
System.out.println("demo1");
}
public String demo(int x,String y)
{
System.out.println("demo2");
return "test0";
}
public String demo(String y,int x)
{
System.out.println("demo3");
return "test1";
}
public static void main(String[] args)
{
Overload O=new Overload();
O.demo();
O.demo(1);
System.out.println(O.demo(1,"NIMITIZ"));
System.out.println(O.demo("NIMITIZ",1));
}
}

运行结果:

demo0
demo1
demo2
test0
demo3
test1

总结

重写 重载
参数列表 一定不能修改 必须修改
返回值类型 一定不能修改 可以修改
异常 可以减少或删除,一定不能出现新的或更广的异常 可以修改
访问级别 可以降低限制,但一定不能做更严格的限制 可以修改

如有错误,请在评论区留言,非常感谢(′▽`〃)。

本文整理自

Java 重写(Override)与重载(Overload)