zoukankan      html  css  js  c++  java
  • 多态,接口

    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

  • 相关阅读:
    IOS8 设置TableView Separatorinset 分割线从边框顶端开始
    文件目录的访问
    The file “XXX” couldn’t be opened because you don’t have permission to view it.解决方法:
    NSString 的常见方法
    如何在一个工作站里创建多个工程(同一个xcode下面创建多个工程)
    自定义NSLog
    内存恶鬼drawRect
    URL编码解码
    怎样在UICollectionView中添加Header和footer
    本人开始玩微信公众号了!名称:BHS编程技术交流分享,只发干货,不发水文,欢迎阅读
  • 原文地址:https://www.cnblogs.com/hdj1073678089/p/7286206.html
Copyright © 2011-2022 走看看