• 多态,接口


    1.多态:
    (1)定义:同一事物在不同时刻表现出不同形态
    (2)多态实现前提: 有继承关系
    有方法重写
    有父类引用指向子类对象

    练习:Pet(宠物) : dog pig cat
    Pet{String name; char sex;double size; eat() play() sleep() }
    dog{eat()}
    pig{eat()}
    cat{eat()}

    由于需求的更改,宠物的子类会越来越多!程序的扩展性会越来越差!如下代码:

    //领养一只宠物猪
    Pet pet1 = new Pig();
    pet1.eat();
    pet1.sleep();

    //领养猫
    Pet pet5 = new Cat();
    pet5.eat();
    pet5.sleep();

    解决方案:
    public class PetTool {

    public void petTool(Pet pet1){
    pet1.eat();
    pet1.sleep();
    }

    } //创建一个PetTool的类,写一个方法,方法中传入类型,
    //例如:上面解决方案中 Pet 是个父类,pet1是Pet对象
    //pet1.eat();
    //pet1.sleep();
    //用pet1调用Pet的的方法
    (3)多态的好处:提高程序的可维护性和可扩展性
    维护性(继承)
    可扩展(多态)

    (4)成员访问的特点

    Pet pet = new Pig();
    pet.play()编译出错(play()子类特有的)
    pet.eat();执行子类的eat()
    成员方法:编译看左边,运行看右边,调用Pig中的eat方法

    pet.name;调用父类的成员变量
    成员变量:编译看左边,运行看左边

    pet.jt();调用父类静态方法
    静态方法:编译看左边,运行看左边
    静态方法和类有关

    (5)多态的弊端:不能访问子类的特有功能
    (6)多态中的转型:向上转型 向下转型
    Java培训特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了
    但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢?
    然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹
    向上转型
    孔子爹 k爹 = new 孔子();
    到人家那里去了
    System.out.println(k爹.age); //40
    k爹.teach(); //讲解论语
    k爹.playGame(); //这是儿子才能做的


    讲完了,下班回家了
    脱下爹的装备,换上自己的装备
    向下转型
    孔子 k = (孔子) k爹;
    System.out.println(k.age); //20
    k.teach(); //讲解论语
    k.playGame(); //英雄联盟

    2.抽象
    (1)理解:看不到,摸不着 抽象概念
    (2)实现:关键字abstract
    修饰类 public abstract class 类名{}
    修饰方法 public abstract 返回值类型 方法名();
    (3)注意:a.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
    b.抽象方法只有声明没有实现,具体的实现需要通过一个普通类继承抽象类,并完成方法的实现!抽象类单继承!
    c.抽象类不能实例化(使用向上转型)
    d.抽象类的子类 : 要么是抽象类
    要么重写抽象类中的所有抽象方法(子类:普通类)

    (4)抽象类的成员特点:
    成员变量
    可以是变量
    也可以是常量

    构造方法 有构造方法,但是不能实例化
    那么,构造方法的作用是什么呢? 用于子类访问父类数据的初始化

    成员方法 可以有抽象方法 限定子类必须完成某些动作
    也可以有非抽象方法 提高代码复用性

    (5)abstract不能和哪些关键字共存
    private 冲突
    final 冲突
    static 无意义

    3.接口
    (1)应用:Java中就提供了接口来定义这些额外功能,并不给出具体实现
    (2)代码实现:
    定义接口的关键字interface :public interface 接口名{}
    类实现接口用关键字implements:class 类名 implements 接口名 {}
    (3)注意事项:
    a.接口不能实例化,通过多态
    b.接口中的方法都是抽象方法,成员变量都是静态常量
    c.类实现接口,必须实现接口中所有未实现的方法
    d.接口和接口:多继承,多个接口之间用逗号隔开
    类和接口:多实现,一个类可以同时实现多个接口,多个接口之间用逗号隔开
    e.接口的子类(实现类)
    可以是抽象类
    可以是普通类:重写接口中的所有抽象方法
    f.接口中的权限修饰符只能是public

  • 相关阅读:
    测试代码
    内网与外网间通信[转]
    向微软首席执行官史蒂夫·鲍尔默致敬
    Spring Cloud OAuth2
    Docker搭建 MySQL 主从复制
    MySQL-查询结果缓存
    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放
    Mybatis一对一关联查询
    application.Properties 自定义变量 注解@ConfigurationProperties使用方法
    Hibernate中的脏检查和缓存清理机制
  • 原文地址:https://www.cnblogs.com/hdj1073678089/p/7286206.html
Copyright © 2020-2023  润新知