zoukankan      html  css  js  c++  java
  • JAVA基础之重载,覆盖/重写,多态

    重载发生在同一个类中

    特点是两同一不同,类相同,方法名相同,参数不同。其他项与重载无关。

    在调用方法的时候,会根据方法名的不同判断具体调用哪个方法。

    创建一个Driver类,类中实现了对driver方法的重载操作。

    public class Driver {
    
        //实现了重载操作
        public void drive(){
            System.out.println("No Parameter");
        }
    
        public void drive(String driver){
            System.out.println("One Parameter "+driver);
        }
    }

    测试重载操作

    public class Test {
    
        public static void main(String[] args){
    
            Driver driver = new Driver();
            driver.drive();
            driver.drive("Jason");
        }
    
    }

    重写/覆盖

    重写和覆盖发生在父类和子类之间,特点是“两同两小一大”,即方法名相同,参数相同,子类返回值类型小或相等,子类抛出异常小或相等,子类方法的访问权限大或相等。

    违反这一原则的话,编译会报错。

    public class Person {
        public int a = 10;
        public void A(){
            System.out.println("Person A");
        }
    }
    public class Teacher extends Person{
        public int a = 20;
        public void A(){
            System.out.println("Teacher A");
        }
    }
    public class Test {
    
        public static void main(String[] args){
            Person person = new Person();
            Teacher teacher = new Teacher();
    
            System.out.println("Person A "+person.a);
            System.out.println("Teacher A "+teacher.a);
            person.A();
            teacher.A();
        }
    
    }

    Person中的变量a和方法A都被其子类覆盖


    多态

    产生于基类和子类之间

    有编译类型和运行类型之分

    只有方法有多态,属性没有多态

    public class Person {
        public int a = 10;
        public void A(){
            System.out.println("Person A");
        }
    }
    public class Teacher extends Person{
        public int a = 20;
        public void A(){
            System.out.println("Teacher A");
        }
    }
    public class Test {
    
        public static void main(String[] args){
            Person person = new Person();
            Teacher teacher = new Teacher();
            Person p = new Teacher();
    
            System.out.println("Person A "+person.a);
            System.out.println("Teacher A "+teacher.a);
            person.A();
            teacher.A();
            p.A();
            System.out.println("Person Teacher A "+p.a);
        }
    
    }

    运行结果:

    Person A 10
    Teacher A 20
    Person A
    Teacher A
    Teacher A
    Person Teacher A 10

  • 相关阅读:
    mysql优化四(SQL优化)
    mysql优化三(索引)
    mysql优化二(优化数据库的设计)
    mysql优化一(优化方式)
    ES6——Thunk函数
    JavaScript例子
    fetch使用
    ES6—Generator的next()方法传参
    ES6——Generator函数抛出异常
    JavaScript对象添加属性和方法
  • 原文地址:https://www.cnblogs.com/xdlaoliu/p/5991730.html
Copyright © 2011-2022 走看看