面试题_重载Overload和重写Override有什么不同?

重载Overload和重写Override有什么不同?

重载:发生在同一个类中,方法名必须相同,参数类型不同、参数个数不同、参数顺序不同、方法返回值和访问修饰可以不同、发生在编译时。

重写:发生在父类子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类不能重写方法。

编译时多态:

  • 编译期间决定目标方法
  • 通过overloading重载实现
  • 方法名相同、参数类型不同、参数数目不同
/**
 * 方法重载
 */

public class Demo1 {
     
    public int addtion(int x,int y){
     
        return x+y;
    }
    public  int addtion(double x,int y,int z){
     
        return (int)x+y+z;
    }
    public int addtion(int x,int y,int z){
     
        return  x+y+z;
    }

    public static void main(String[] args) {
     
        Demo1 demo=new Demo1();
        System.out.println(demo.addtion(1,2));
        System.out.println(demo.addtion(1.0,2,3));
        System.out.println(demo.addtion(3,4));
    }
}
//运行结果:
3
6
7

运行时多态:

  • 运行期间决定目标方法
  • 方法名相同,参数相同
  • overriding和继承实现
  • JVM目标方法
package EverydayTopic;

/**
 * 方法重写override
 */


 class Animal {
     
    public void run() {
     
        System.out.println("animal is running..");

    }

 void eat() {
     
        System.out.println("animal is eating...");
    }
}

    //dog
class Dog extends Animal {
     
        @Override
        public void run(){
     
            System.out.println("i can running---dog");
        }      
    }
class Cat extends Animal {
     
    @Override
    public void run(){
     
        System.out.println("i can running++cat");
    }

    @Override
    public void eat(){
     
        System.out.println("i can eating++cat");
    }
}

    public class OverideDemo {
     
    public static void main(String[] args) {
     
    Animal dog=new Dog();
    Animal cat=new Cat();
    dog.eat();
//    dog.run();
    cat.eat();
    cat.run();
    }
}
//运行结果
animal is eating...
i can eating++cat
i can running++cat
    
    
    //运行结果可见dog中eat()没有重写实现,则把父类Animal的eat()打印出来
    //Cat中的eat() run()实现重写,结果能够打印

你可能感兴趣的:(每天一道Java面试题,java,多态,面试)