美文网首页
随笔——java中的接口、继承和多态

随笔——java中的接口、继承和多态

作者: 小书同学 | 来源:发表于2020-02-11 12:09 被阅读0次

    一、多态

    Java中的多态体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
    举个例子,一个Child类,继承与Father类,那么这个Child类的实现类,既可以赋值给一个Child类型的引用,也可以赋值给一个Fatcher类型的引用。
    所以,多态的表现就是父类的引用指向的是子类对象。
    多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
    在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

    二、抽象类

    Java中定义抽象类用的关键字是abstract,抽象类是不可以实例化的。在Java中使用多态的时候,并不需要父类可以实例化,只需要子类可以实例化,也就是只需要子类对象。
    由于抽象类只能被继承,子类必须重写父类的所有抽象方法,即使子类不需要,也必须重写。

    三、接口

    接口用关键字interface来定义,也可以将接口看作是抽象类的延伸,可看作纯粹的抽象类。
    但是接口中的方法,子类可以选择性的实现。

    四、接口与继承

    Java中不允许多重继承,即不允许一个子类同时继承一个或多个父类(即同时extends多个类)。但是可以使用接口实现多个(即可以同时implements多个接口,同时实现多个接口)。
    这就是多重继承。
    多重继承语法:
    *class 类名 implements 接口1,接口2,...,接口n *

    1、一个类只能继承一个类:class A extends B{}

    2、一个类可以实现多个接口:class A implements B,C,...{}

    3、一个接口可以继承多个接口:interface intf1 extends intf2,intf3,...{}

    4、在继承类的同时也可以继承接口:class A extends B implements intf1,intf2,...{}

    五、多态的使用方式

    多态的使用格式一般为:
    父类类型 变量名 = new 子类类型();
    变量名.方法名();

    1.普通类多态定义的格式
    父类 变量名 = new 子类();
    如: class Father {}
    class Child extends Father {}
    //类的多态使用
    Father father = new Child();

    2.抽象类多态定义的格式
    抽象类 变量名 = new 抽象类子类();
    如: abstract class Father {
    public abstract void method();
    }
    class Child extends Father {
    public void method(){
    System.out.println(“重写父类抽象方法”);
    }
    }
    //类的多态使用
    Father father = new Child();

    3. 接口多态定义的格式
    接口 变量名 = new 接口实现类();
    如: interface Father {
    public abstract void method();
    }
    class Child implements Father {
    public void method(){
    System.out.println(“重写接口抽象方法”);
    }
    }
    //接口的多态使用
    Father father = new Child();

    注意事项
    同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。

    Person p1 = new Student();
    Person p2 = new Teacher();
    p1.work(); //p1会调用Student类中重写的work方法
    p2.work(); //p2会调用Teacher类中重写的work方法
    当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。

    相关文章

      网友评论

          本文标题:随笔——java中的接口、继承和多态

          本文链接:https://www.haomeiwen.com/subject/qfotfhtx.html