当前位置: 首页 > news >正文

河南网站建设yipinpai注册网站商标多少钱

河南网站建设yipinpai,注册网站商标多少钱,wordpress上传完了,app系统软件开发目录 一、抽象类和抽象方法 1.1 概念 1.2 特性 1.3 作用 二、接口 2.1 概念及定义 2.2 特性 2.3 实例#xff1a;笔记本电脑 2.4 一个类可以实现多个接口 2.5 一个接口可以继承多个接口 2.6 Comparable接口 2.7 Comparator接口 2.8 Cloneable接口 2.9 浅拷贝和深… 目录 一、抽象类和抽象方法 1.1 概念 1.2 特性 1.3 作用 二、接口 2.1 概念及定义 2.2 特性 2.3 实例笔记本电脑 2.4 一个类可以实现多个接口 2.5 一个接口可以继承多个接口 2.6 Comparable接口 2.7 Comparator接口 2.8 Cloneable接口 2.9 浅拷贝和深拷贝 2.10 抽象类和接口的区别 三、Object类 3.1 概念 3.2 获取对象信息 3.3 对象比较equals方法 2.4 hashcode方法 一、抽象类和抽象方法 1.1 概念 1. 抽象类如果一个类没有足够的信息来描述一个对象(这个类通常是父类)那么这个类可以用abstract修饰成为抽象类。 2. 抽象方法抽象类中被abstract修饰的方法称为抽象方法抽象方法可以不具体实现。 1.2 特性 ① 抽象类也是类内部可以有成员和构造方法等也可以发生向上转型方法重写多态。 ② abstract不能修饰被private、static、final修饰的方法因为抽象方法要被子类重写(被重写的方法要满足能被重写的条件) ③ 抽象方法可以不具体实现如果具体实现了反而会报错。 ④ 如果一个类中包含抽象方法那么这个类必定是抽象类但抽象类中不一定有抽象方法。 ⑤ 抽象类不能实例化对象只能被继承(和被final修饰的类效果相反)并且继承抽象类的子类A必须要重写抽象类中的抽象方法如果不重写得将子类A也得写成抽象类那么当子类B继承子类A后就得重写子类A的父类和子类A中所有没被重写的方法(出来混总是要还的)。 /*抽象方法*/ abstract class Father {/*抽象类*/public abstract void funcA(); }/*抽象方法*/ abstract class Son extends Father {/*抽象类*/public abstract void funcB(); }class GrandSon1 extends Son {/*重写Father类中的抽象方法*/Overridepublic void funcA() {System.out.println(我是爷爷的第一个孙子);}/*重写Son类中的抽象方法*/Overridepublic void funcB() {System.out.println(我是爸爸的第一个儿子);} }class GrandSon2 extends Son {/*重写Father类中的抽象方法*/Overridepublic void funcA() {System.out.println(我是爷爷的第二个孙子);}/*重写Son类中的抽象方法*/Overridepublic void funcB() {System.out.println(我是爸爸的第二个儿子);} }public class Test01 {public static void funcDemo1(Father father) {//向上转型成Father类只能调用Father类有的成员father.funcA();}public static void funcDemo2(Son son) {//向上转型成Son类由于Son类继承了Father类//此时能调用Father类和Son类有的成员//所以无论在抽象类有没有继承抽象类的情况下//记住向上转型成最后一个抽象类即可son.funcA();son.funcB();}public static void main(String[] args) {GrandSon1 grandSon1 new GrandSon1();GrandSon2 grandSon2 new GrandSon2();//Test01.funcDemo1(grandSon1);//Test01.funcDemo1(grandSon2);Test01.funcDemo2(grandSon1);Test01.funcDemo2(grandSon2);} } 1.3 作用 抽象类本身不能被实例化要想使用只能创建该抽象类的子类然后让子类重写抽象类中的抽象方法。有些人可能会说了, 普通的类也可以被继承呀, 普通的方法也可以被重写呀, 为啥非得用抽象类和抽象方法呢? 确实如此但是使用抽象类相当于多了一重编译器的校验。使用抽象类的场景就如上面的代码, 实际工作不应该由父类的方法完成, 而应由子类重写的方法完成那么如果不小心忘记在子类中重写父类中的方法了在方法调用的过程中父类使用普通类编译器是不会报错的但是父类是抽象类就会在子类继承父类后提示需要重写父类中的方法, 让我们尽早发现代码中的逻辑问题。 很多语法存在的意义都是为了 预防出错例如我们曾经用过的 final 也是类似。创建的变量用户不去修改, 不就相当于常量嘛? 但是加上 final 能够在不小心误修改的时候, 让编译器及时提醒我们。充分利用编译器的校验, 在实际开发中是非常有意义的。 二、接口 2.1 概念及定义 概念接口英文Interface在JAVA编程语言中是一个抽象引用数据类型是抽象方法的集合接口用interface关键字来定义。 定义 ① 定义接口要使用interface关键字(接口并不是类)。 ② 接口的命名一般以大写字母I开头并且命名一般使用形容词性的单词。 ③ 接口中的成员可以有成员变量和成员方法但成员变量必须是public static final修饰的成员方法必须是public abstract修饰的(也就是说接口中的成员变量必须是公开可以使用的常量接口中的成员方法必须是抽象方法)阿里编码规范中约定接口中的方法和属性不要加任何的修饰符号因此我们在写接口中的成员时可以不写前面的修饰编译器会自动修饰。 ④ 接口前面不要用abstract修饰因为接口本身比抽象类更抽象。 类实现接口的格式 2.2 特性 ① 抽象类和接口都不能实例化对象抽象类用来被类继承接口用来被类实现。 ② 当一个类实现一个接口时意味着要在这个类中重写接口中所有抽象方法如果在这个类中不想重写则这个类必须定义成抽象类继承这个抽象类的类得重写接口和这个抽象类中的所有抽象方法。 ③ 接口也可以发生向上转型动态绑定多态(动态绑定是原理多态是思想)。 ④ 接口定义好后也会有一个单独的Java文件编译完成后生成的字节码文件的后缀也是(.class)。 ⑤ 接口中不能有静态代码块构造代码块构造方法等。 ⑥ 重写接口中的方法时方法只能是public修饰的(因为重写方法的权限要大于等于重写前的权限而接口中的成员方法默认是public的)。 ⑦ 接口中被 default 或 static 修饰的方法要写清楚具体实现的语句且被实的接口中default成员方法可以不重写也可以被重写并不会像接口中的抽象方法一样强制要重写。 2.3 实例笔记本电脑 实现笔记本电脑使用USB鼠标、USB键盘的例子 1. USB接口包含打开设备、关闭设备功能 2. 笔记本类包含开机功能、关机功能、使用USB设备功能 3. 鼠标类实现USB接口并具备点击功能 4. 键盘类实现USB接口并具备输入功能 2.4 一个类可以实现多个接口 1. 在Java中类和类之间只能是单继承的也就是说一个类只能有一个父类但一个类可以实现多个接口从而间接达到实现多继承的目的。 2. 一个类实现多个接口时每个接口中的抽象方法都要实现否则类必须设置为抽象类。 3. 例如根据我们当前掌握的知识当我们想要描述狗、鱼、鸭这三种动物时我们会定义狗、鱼、鸭这三个类并且由于它们之间共属于动物我们可以定义一个父类Animal从而达到代码复用的效果。但是在定义的过程中我们会发现一个问题游泳、跑步、飞行这三个行为如果我们把它们定义在父类Animal中并不稳妥因为继承是对子类共性的抽取并不是所有的动物都同时具备这三个行为如果我们把它们定义在狗、鱼、鸭的各自类中这又会造成代码冗余如果我们把它们定义在一个新的类A中当我们定义狗、鱼、鸭类时又会发现类是不支持多继承的继承了Animal类就不能再继承A类了。在这种场景下我们把游泳、跑步、飞行这三个行为定义在一个接口中最为合适这样子类既可以继承Animal类也可以根据需要拥有游泳/跑步/飞行这三个行为而且不会造成代码冗余。于是我们可以写下如下图代码该代码展示了 Java 面向对象编程中最常见的用法一个类继承一个父类, 同时实现了多个接口。 4. 使用接口的好处让程序员忘记类型。例如下图中用绿色方框框起来的方法参数部分采用了向上转型传参数的方式在调用该方法传参时程序员可以不用考虑传入的参数是什么类只需要关心传入的参数的类中是否实现了对应的接口。 2.5 一个接口可以继承多个接口 1. 一个接口可以继承多个接口从而达到复用的效果关键字也是extends。 2. 接口的继承相当于把多个接口合并在一起。 3. 下图代码中接口C继承了接口A、B实现接口C的TestNew类要重写接口A、接口B、接口C中所有的抽象方法否则TestNew类得定义成抽象类。 2.6 Comparable接口 1. 关系运算符只能比较基本数据类型数据的大小引用数据类型的数据比较大小要用到Comparable接口中的compareTo方法。 2. 具体做法为将要比较大小的引用数据类型的对象它对应的类实现Comparable接口在类中重写接口中的compareTo方法compareTo方法的内部自定义根据类的哪一种成员变量进行比较。我们在比较该引用数据类型的对象的大小时直接用对象的引用调用compareTo方法并传参即可不用定义一个新的方法使用向上转型(这样写有点多此一举了)举例代码如下图所示。 3. Arrays.sort方法在排序装有引用数据类型的数组时会先将数组中的元素强制转换成Comparable类型然后调用compareTo方法比较两个相邻数据的大小最后根据比较的结果对数组中相邻两个元素进行位置调整。 这也就是说使用Arrays.sort方法对装有引用数据类型数据的数组进行排序时也得先让对应引用数据类型的类实现Comparable接口并在类中重写了compareTo方法后才能正常进行排序且值得注意的是也就是说Arrays.sort排序的逻辑与compareTo内部实现比较大小的依据有着极大的关联当compareTo内部根据年龄、姓名等比较大小时可能会造成不同的排序结果。 4. 使用Comparable接口中的compareTo方法来比较两个引用数据类型的大小的局限性在于一旦把compareTo中的内容写下了之后以后在比较该引用数据类型对象的大小时调用compareTo方法只能按照compareTo方法中依据的东西判断大小了。 5. 写一个自己的sort方法实现和Arrays.sort方法一样的功能(采用冒泡排序) 2.7 Comparator接口 1. 针对Comparable接口的局限性在比较某个类实例化的两个对象的大小时我们可以采用实现Comparator接口对里面的compare方法进行重写而不去采用实现Comparable接口。 2. 具体做法重新定义新的类(A)去实现Comparator接口里面写上要比较的类使用时直接new一个A类的对象a使用a调用compare方法并传参即可我们可以按照这种方式写多个比较器来达到目的如果Comparator接口由比较对象的类实现则会达不到想要的效果如下图二所示。 3. 我们在调用Arrays.sort方法时也可以将比较器作为参数传递给sort方法使得sort方法在排序装有引用数据类型的数组时比较相邻的两个元素的大小采用比较器中的compare方法而不再采用Comparable中的compareTo方法。 2.8 Cloneable接口 1. 使用场景想要克隆某个对象时。 2. 实现步骤     ① 给该对象对应的类实现Clonable接口但并不用重写Cloneable中的接口因为这个接口里面并没有抽象方法此时这个接口叫做空接口/标记接口这种接口的意义在于只有实现了该接口才能证明你有该功能除此之外没有什么特殊的意义。    ② 调用Object类中的clone方法。但我们不能直接调用因为Object类中的clone方法被protected修饰了此时是不能在不同包的非子类中使用的 于是我们可以先在子类中重写Object的克隆方法在这个重写的克隆方法内部直接返回原来克隆方法的返回值即可因为我们调用克隆方法的目的本来就是得到克隆后对象的地址在不同包的子类中是可以调用Object的clone方法的。 -》补充在子类中快速重写Object类中方法的快捷方式 3. 由于clone方法的返回值是Object类型的因此在接收clone方法的返回值时要强制类型转换一下(Object类是所有类的父类这里要发生向下转型)。 4. 当上面的步骤都做好后代码运行时还会报错此时是由于异常原因解决的方法是在main方法参数列表的后面加上clone方法参数列表后的“throws CloneNotSupportedException”即可异常问题后面的文章中会讲到。 -》下图是示例代码 -》上图代码在内存中的示意图  2.9 浅拷贝和深拷贝 1. 浅拷贝修改上文Cloneable接口中的代码即给Student类增加一个成员变量(该成员变量是Money类创建的一个对象)并保持其他的代码不变。代码和代码在内存中的示意图如下图所示。 我们会发现一个问题克隆出的student2中成员变量m指向的对象和student1中成员变量m指向的对象一样当我们在修改student1/student2中m对象的money值时student1和student2中m对象的money值都会变这种现象被称为浅拷贝(并没有实现真正的拷贝效果)。 2. 深拷贝为了实现真正的拷贝效果我们可以修改上述代码中重写的clone方法来达到目的。具体操作是在Student类重写的clone方法中先调用Object类中的clone方法克隆一下this所指向的对象并让临时的Student类对象tmp来接收然后为Money类实现Cloneable接口并重写clone方法接着克隆一下this中的m对象并让tmp中的m接收最后返回tmp即可达到真正的拷贝效果代码和代码在内存中的分析如下图所示。 2.10 抽象类和接口的区别 1. 抽象类和接口都是 Java 中多态的常见使用方式。 2. 核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中 不能包含普通方法, 子类必须重写所有的抽象方法。 3. 再次提醒: 抽象类存在的意义是为了让编译器更好的校验, 像 Animal 这样的类我们并不会直接使用, 而是使用它的子类. 万一不小心创建了 Animal 的实例, 编译器会及时提醒我们。 三、Object类 3.1 概念 1. Object类是所有类的父类。 2. 对于整个Object类中的方法需要实现全部掌握本小节当中我们主要来熟悉这几个方法toString()方法equals()方法hashcode()方法。 3. 在ideal中如何看到Object类中所有的方法     做法双击shift在出现的对话框中勾选Include non-project items并在搜索框中搜索Object点击第一个Object然后在ideal页面的左下角点击Structure即可看到Object类中的所有的方法。 3.2 获取对象信息 如果要打印对象的信息可以通过重写Object类中的toString()方法在打印时对于单个对象直接用sout打印对象的名称即可对于装有多个对象的数组来说用sout打印Arrays.toString的返回值即可具体示例代码如下图所示。 3.3 对象比较equals方法 1. Object类中的equals方法的功能是比较两个引用所指向的对象是否为同一个对象如果是就返回true否就返回false并且Object类中的equals方法是用public修饰的哦~。 2. 也就是说当我们想比较两个对象中的内容是否相同时得重写Object类中的equals方法。并且ideal提供了快捷方式具体做法单机右键Generate点击equals() and hashCode()然后一路next。 2.4 hashcode方法 1. toString方法的源码中有一个hashCode()方法它可以帮我们算一个具体的对象位置(我们可以暂时理解为内存地址)。Integer.toHexString()方法可以将这个地址以16进制输出。 2. hashCode()方法是一个native方法底层是由C/C代码写的所以我们看不到。 3. 如果在某个业务场景中我们需要实现如果对象的成员变量都一致我们就认为是同一个人的话我们可以通过重写hashCode方法来达到目的。ideal提供了快捷方式具体做法单机右键Generate点击equals() and hashCode()然后一路next。 4. 重写hashCode前       重写hashCode后 本篇文章已完结谢谢支持哟 ^^
http://www.yingshimen.cn/news/39083/

相关文章:

  • 网站建设需要哪些设备网站优化怎样做外链
  • 做公司网站需要什么seo 首页
  • 北京网站优化方法潜江招聘资讯网
  • 做百度网站费用多少合适网站如何做单项链接
  • 单位网站建设框架国外网站能否做百科参考资料
  • 找图片素材的网站有哪些网络运营外包托管
  • 百度站长联盟微信小程序注册认证
  • 公司网站模板 html临沂市兰山区建设局网站
  • 聊城网站百度推广灯塔网站建设
  • 网站用模板为什么不利于seo推广小说小程序源码
  • 校园微网站建设方案上海制作公司
  • 有没有做卡哇伊的企业网站微信视频号小店
  • 百度移动版搜素引擎排名优化计费方式
  • 芜湖哪里有做网站的青岛鲁icp 网站制作 牛商网
  • 电子商城网站建设项目规划书上海市企业服务云平台登录
  • 网站建设分金手指专业四张家港网站优化
  • 怎么申请公司网站成都医院手机网站建设
  • 官网建站平台去哪个网站做农产品推广
  • 企业营销策划报告湘潭市优化办
  • phpcms做网站页面开发专业外贸平台推广
  • 没有网站怎么做推广yahoo搜索引擎入口
  • 网站开发后台php技术做爰视频免费安全的网站
  • 网页加载不出来怎么办知乎seo排名帝搜软件
  • 购物网站 建站服务电商平台代运营服务
  • 工作室网站建设方案模板wordpress媒体库文件夹
  • 网站开发的图片要求wordpress建站详细教程
  • 龙岗网站制作新闻软件推广怎么做
  • 福州网站建设出格做pc端网站要多少钱
  • 长岭网站优化公司网站中队人物介绍怎么做
  • 网站注册管理策划方案网站建设项目的实训报告