重写和重载
关键字:重写、重载、super
一、方法的重写和重载是java多态性的不同表现,重写是父类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,(同名,不同参)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,(同名,同参)。
二、方法重写:参数列表必须完全与被重写方法的相同。子类返回值必须与父类相同,除非是子类名。子类的访问权限不能比父类的访问权限更低。例如:如果父类的一个方法被声明为 protected,那么在子类中重写该方法就不能声明为 private。
class Animal {
public void move() {
System.out.println("动物可以动");
}
}
class Dog extends Animal {
public void move() {
System.out.println("狗可以跑和走");
}
public static void main(String args[]) {
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 执行 Animal 类的方法
b.move();// 执行 Dog 类的方法
}
}
上面代码中运行结果如下:
动物可以动
狗可以跑和走
class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Dog extends Animal{ public void move(){ System.out.println("狗可以跑和走"); } public void bark(){ System.out.println("狗可以吠叫"); } } public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();//执行 Dog 类的方法 b.bark();//执行 Dog 类的方法 }
而这个代码由于b的父类Animal中没有bark方法,所以会编译出错。
三、super关键字的使用
在子类中可以用super关键字来调用
class Animal{ public void move(){ System.out.println("动物可以动"); } } class Dog extends Animal{ public void move(){ super.move(); // 应用super类的move方法 System.out.println("狗可以跑和走"); } public static void main(String args[]){ Animal b = new Dog(); // Dog 对象 b.move(); //执行 Dog类的方法 } }
这个代码的输出结果就是
动物可以移动
狗可以跑和走
四、方法重载:被重载的方法必须改变参数列表(参数个数或类型不一样)。被重载的方法可以改变返回类型。被重载的方法可以改变访问修饰符。
public class Demo01 { //以下一个有参数一个无参数 public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } //以下两个参数类型顺序不同 public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Demo01 o = new Demo01(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } }
输出结果如下:
test1 1 test2 test3 returntest3 test4 returntest4