重写和重载

关键字:重写、重载、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
posted @ 2019-12-15 16:07  土豆烤鸭  阅读(165)  评论(0编辑  收藏  举报