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

昆明网站开发报价新手编程入门先学什么

昆明网站开发报价,新手编程入门先学什么,vs网站毕业设计怎么做,镇江公司网站建设文章目录 一、概述1.1、何为接口1.2、接口的定义 二、特点2.1、接口的成员变量2.2、接口的成员方法2.3、接口中不可以含有构造器和代码块2.4、接口不可以实例化对象2.5、接口和类之间使用implements关键字进行连接2.6、当类在重写接口中的方法时#xff0c;不可以使用默认的访… 文章目录 一、概述1.1、何为接口1.2、接口的定义 二、特点2.1、接口的成员变量2.2、接口的成员方法2.3、接口中不可以含有构造器和代码块2.4、接口不可以实例化对象2.5、接口和类之间使用implements关键字进行连接2.6、当类在重写接口中的方法时不可以使用默认的访问权限2.7、接口虽然不是类但是接口通过编译了之后也会生成class文件2.8、如果类没有实现接口当中的全部抽象方法那么该类必须要设置为抽象类2.9、类支持实现多个接口2.10、接口之间支持多继承 三、应用3.1、实现多个接口3.2、给对象排序 四、总结 一、概述 1.1、何为接口 我们知道继承普通类和继承抽象类的存在继承本质上就是实现对共性的抽取同时实现代码的复用通过对现实事物抽象成为一个类类内包含这一类事物的属性和行为继承的存在就是将这一类事物的共同属性和行为抽取出来当我们在定义属于这一类事物的类时可以直接继承使用而抽象类的出现是因为父类提供的信息不足以描述一个具体的类因此将父类定义为抽象类间接加上了一层校验防止在代码中不小心使用父类创建并使用父类对象。但是继承也有缺点继承是对共性的抽取不同的对象虽然同属一个类但各自都会有不同的个性。          比如动物类狗属于动物鸟属于动物但是狗会跑鸟不会鸟会飞但是狗不会这就是两者的个性而非共性因此其父类动物类就不可以含有行为跑和行为飞。可能有人会说在定义狗类的时候可以定义自己特有的行为跑在定义鸟类的时候可以定义鸟类自己特有的行为飞这种方法确实可以但是在定义一个鸭子类呢鸭子可以飞可以跑难道也要在定义鸭子类的时候再单独定义行为跑行为飞不免有些繁琐了吧当定义的类多了每个类都有单独的自己的行为但是不同的类之间又有共性那继承的本质何在          因此在这个时候接口就被定义出来了接口可以理解为是对外提供的一组公共的行为规范标准只要是当前类实例化的对象符合行为规范标准那么我们就可以让当前类实现这个接口举个例子我们可以定义一个接口是行为跑的标准狗这个对象会跑因此狗这个类就可以实现该接口再定义一个接口是行为飞的标准鸟这个对象会飞鸭子这个对象也会飞因此鸟和鸭子这两个类都可以实现该接口。 当鸭子类实现了接口跑和接口游之后鸭子类就包含有了行为跑和行为游狗类实现了接口跑后狗类就包含有了行为跑。因此接口技术用于描述类具有什么功能但是接口中并不给出具体的实现当某个类需要使用当前接口时再去实现接口中的方法类需要遵从接口中描述的统一标准进行定义所以接口就是统一的行为规范标准接口在实现的时候只需要符合行为规范标准就可以通用。在Java中接口可以看作是多个类的公共规范是一种引用类型。 1.2、接口的定义 接口的定义和类的定义相似类的定义需要所以class关键字而接口的定义需要使用interface关键字而接口的定义方式就是将类的定义关键字class换成interface关键字即可。 访问修饰符 class 类名访问修饰符 interface 接口名接口的创建和类的创建一样都是通过右键单击src生成的 二、特点 2.1、接口的成员变量 接口的成员属性默认是被 public static final修饰的主要就是意味着在接口中定义的成员属性默认是静态常量。 1、当接口的变量被private protected访问修饰符修饰时编译器直接爆红     2、当变量没有任何修饰符修饰的时候在实现类当中不可以对其进行修改     3、当变量只被pulic修饰的时候在实现类当中也不可以对其进行修改     4、当变量被public static final 修饰时三个关键字都是灰色的说明变量是默认被这三个关键字修饰的因此这三个关键字可以不用编写编译器会自动加上的 2.2、接口的成员方法 接口的成员方法默认是被public abstract修饰的也就是说不可以有具体的实现内容这也就意味着接口中的成员方法默认是抽象 方法。 如图方法func有{ }代表有具体的实现但是不符合抽象方法的语法编译器直接爆红方法func1编写完参数列表后直接引号结尾符合抽象方法的语法。 我们可以发现被public abstract修饰的方法和什么的不修饰的方法都是一样的并且func方法的关键字public abstract 是灰色的说明方法默认是被这两个关键字修饰的即便程序员没有编写编译器也会自动添加的。     也就是说在接口当中不可以有普通方法的实现一旦实现编译器直接爆红但是一定要实现普通方法也不是不可以只需要将普通方法修饰成为静态方法即可 或者是让当前方法被default修饰 2.3、接口中不可以含有构造器和代码块 因此在接口中定义的属性都只能够通过就地初始化进行初始化无法通过构造器进行初始化 2.4、接口不可以实例化对象 接口和抽象类一样都是引用型数据类型但都不可以通过关键字new进行实例化对象的本质上两者提供的信息都不足以描述一个具体的对象就没有必要实例化对象如果误把抽象类或者接口进行实例化对象并使用了那么编译器会直接爆红提示错误因此接口也含有和抽象类一样的校验功能。 2.5、接口和类之间使用implements关键字进行连接 类和类之间是继承关系类和接口之间是实现关系。子类继承父类类实现接口 public interface Itest {public abstract void func();public void func1();void func3(); }class teat implements Itest {}需要注意的是接口和抽象类一样里面都包含有抽象方法这也就意味着当类实现了接口后需要重写接口里面全部的抽象方法。 public interface Itest {public abstract void func();public void func1();void func3(); }class teat implements Itest {Overridepublic void func() {}Overridepublic void func1() {}Overridepublic void func3() {} }2.6、当类在重写接口中的方法时不可以使用默认的访问权限 重写的规则为 1、方法名返回类型参数列表要一致 2、重写必须要在继承机制下 3、重写方法的访问权限必须要大于等于被重写方法的访问权限      在接口中的方法默认是被public abstract修饰的那么类当中重写方法的访问权限就必须要大于等于public。 2.7、接口虽然不是类但是接口通过编译了之后也会生成class文件 2.8、如果类没有实现接口当中的全部抽象方法那么该类必须要设置为抽象类 如果类当中没有实现接口中的全部抽象方法时编译器会爆红直到全部实现之后才不会爆红因此和抽象类一样继承抽象类和实现接口的类只有两种选择要么老老实实全部实现要么就将当前类设置为抽象类。不过该来的还是回来抽象类存在的意义就是为了被继承也就是说即便设、置为抽象类了该抽象类后面也是会被继承的那么还是逃不过实现抽象方法的结果 public interface Itest {public abstract void func();public void func1();void func3(); }abstract class teat implements Itest {}class test extends teat {Overridepublic void func() {}Overridepublic void func1() {}Overridepublic void func3() {} }2.9、类支持实现多个接口 在Java中类不支持多继承类与类之间是单继承一个类只能有一个父类但是在Java中一个类可以实现多个接口。 public class Duck extends Animal implements Iswim , IRun{public Duck(String name) {super(name);}Overridepublic void run() {System.out.println(name 在跑);}Overridepublic void wim() {System.out.println(name 在游);} }如代码Duck类继承了Animal类并实现了接口Iswin和接口IRun两个接口 2.10、接口之间支持多继承 类与类之间支持继承类与接口之间支持实现接口与接口之间也支持继承并且支持多继承也就是使用接口可以达到多继承的效果。     接口可以继承接口从而达到复用的效果使用extends关键字。 通过接口继承创建一个新的接口IAmphibious表示“两栖的”此时如果实现该借口那么当前类就必须要重写IRun接口和Iswin接口的全部抽象方法。如此一来间接的实现了多继承的效果也达到了IRun接口和Iswin接口中的方法代码复用减少了程序员编写重复代码的时间。 三、应用 3.1、实现多个接口 //MAin类 public class Main {public static void funcrun(Irun irun) {irun.run();}public static void funcfly(Ifly ifly) {ifly.fly();} public static void funcsein(Iswin iswin) {iswin.swin();}public static void funcer(Isecdwe isecdwe) {isecdwe.run();isecdwe.swin();}public static void functih(ITiHabitat iTiHabitat) {iTiHabitat.fly();iTiHabitat.run();iTiHabitat.swin();}public static void main(String[] args) {Dog dog new Dog(狗,5);bird birdi new bird(鸟,5);Duck duck new Duck(鸭子,5);} }//动物类 public abstract class Animal {protected String name;protected int age ;public abstract void eat();public Animal(String name, int age) {this.name name;this.age age;} }//狗类 public class Dog extends Animal implements Isecdwe{public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(name 在吃狗粮....);}Overridepublic void run() {System.out.println(name 在跑....);}Overridepublic void swin() {System.out.println(name 在游....);} }//鸟类 public class bird extends Animal implements Ifly{Overridepublic void fly() {System.out.println(name 在飞.....);}public bird(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(name 在吃鸟粮....);} }//鸭子类 public class Duck extends Animal implements ITiHabitat {public Duck(String name, int age) {super(name, age);}public void eat() {System.out.println(name 在吃鸭粮....);}Overridepublic void run() {System.out.println(name 在跑.....);}Overridepublic void swin() {System.out.println(name 在游....);}Overridepublic void fly() {System.out.println(name 在飞....);} }//接口跑 public interface Irun {void run(); }//接口游 public interface Iswin {void swin(); }//接口飞 public interface Ifly {void fly(); }//接口两栖 public interface Isecdwe extends Iswin,Irun{ }//接口三栖 public interface ITiHabitat extends Irun,Iswin,Ifly{ }在func方法内部方法不关心传递过来的对象是什么对象方法内部只关心该对象是否有实现当前接口然后当前对象实现了接口那么成功编译如果没有实现当前接口那么编译报错。 父类对子类共性的抽取 接口对象的行为标准规范也可以说是某种功能特性          不是所有的动物都会飞会游这些行为不是动物的共性因此无法将这些行为定义到父类当中最优解就是将这些非共有行为设置为接口只要是符合接口定义的行为规范准则的动物都可以实现接口此时就解决了非共性问题。可以简单理解为父类是共有特性接口是独有特性 Java面向对象编程中最常见的用法一个类继承一个父类同时实现多个接口。这样设计有什么好处呢可以让程序员忘记类型有了接口之后类的使用者就不需要再关心具体类型只需要关心当前类是否有实现某个接口具备某种能力。          在func方法中参数列表设置为接口类型则该方法就不需要关注传递过来的对象是否是动物只要该对象的类型实现了该接口就可以使用该方法也就是说重新定义一个机器人类只要机器人类实现了该接口则机器人类就可以调用该方法。 3.2、给对象排序 当我们实例化了大量的学生对象此时需要对学生对象进行排序我们可以定义一个学生类型的数组并将顺序存储进入数组中。我们知道Java有定义一个冒泡排序的方法sort我们能否直接通过该方法进行对学生对象的排序呢 编译直接报错 将数组内容强制转化为Comparable类型。          在调用sort方法时该方法底层会调用compareTo方法进行比较而compareTo方法是在Comparable接口底下的方法我们当前都没有实现Comparabe接口怎么能够强制转化为Comparable类型因此我们需要在学生类当中实现Comparable。 public class Student implements ComparableStudent{protected String name;protected int score;Overridepublic String toString() {return Student{ name name \ , score score };}public Student(String name, int score) {this.name name;this.score score;}Overridepublic int compareTo(Student o) {return 0;} }此时我们实现了Comparable后面的代表泛型证明比较的是Student这个类此时还需要重写compareTo方法赋予比较规则。此时我们可以设定比较的规则是按照姓名来比较还是按照成绩高低来比较比如我们设定姓名来比较。 Overridepublic int compareTo(Student o) {return this.name.compareTo(o.name);}此时我们设定好了按照姓名比较的规则在String类当中有重写的compareTo方法我们直接调用该方法进行比较即可此时是按照正序进行排序的 排序成功我们在更换另外一个比较方式按照成绩的高低来进行排序也就是更换compareTo()方法实现内容。 Overridepublic int compareTo(Student o) {return this.score - o.score;}更换完成当方法返回的是正数时代表调用该方法者比较大当方法返回负数时代表方法调用者比较小当方法返回值为0时代表方法调用者和方法传递值一样大。 我们可以自己尝试编写sort方法用自己的方法实现排序过程小小冒泡。 public static void bubble(Student[] student){for (int i 0; i student.length; i) {for (int j 0; j student.length - 1 - i; j) {if(student[j].compareTo(student[j 1]) 0) {Student tmp student[j];student[j] student[j 1];student[j 1] tmp;}}}}实现完成。 color“red” size“3”在sort方法底层会调用compareTo方法compareTo的参数是Student因为我们在实现Comparable接口的时候指定了比较的是Student类的对象因此通过快捷键生成的重写方法的参数默认是Student类型的。     对于sort方法来说需要传入的数组每一个对象都是“可比较的”需要具备cmpareTo这样的能力通过重写compareTo这样的方式就可以定义比较规则。 但是我们仔细观察好像不是很方便因为现在是按照成绩高低进行排序如果明天我想要按照姓名来排序呢直接更改代码吗不合适当我们的代码投入使用了之后会产生数据如果对当前已经投入使用的代码进行更改有可能会导致连锁反应的出现导致出现其他的错误。那么这个时候我们可以使用sort()方法的重载方法更换底层将sort方法的比较方法更换为Comparetor接口底下的compare方法 我们需要创建一个类来重写compare该方法内部的比较规则是按照成绩高低进行排序 public class namesort implements ComparatorStudent {Overridepublic int compare(Student o1, Student o2) {return o1.score - o2.score;} }再创建另外一个类来重写另外一个规则按照姓名来排序 public class scoresort implements ComparatorStudent {Overridepublic int compare(Student o1, Student o2) {return o1.name.compareTo(o2.name);} }此时我们就可以随意按照不同的规则进行比较了不会再因为单独的规则而影响代码的使。          可能有人会说如果Comparable接口也通过定义两个不同的类实现然后进行重写compareTo()方法也可以做到不同的规则进行比较可以吗首先我们需要注意的是在使用默认底层的情况下是需要将数组内容强制转换为Comparable类型的也就是说Student类必须实现Comparable接口才可以再执行下去就是调用compareTo方法进行比较如果将Comparable接口定义在外面的类并重写方法没什么用啊外面的类和Student类怎么能够串联在一起sort方法只会调用Student类里面的方法而不会调用外面的类的方法          更换底层的重载方法也不可以重载方法的参数列表规定参数是Comparator类型传递实现了Comparable的类是行不通的编译直接报错。 四、总结 接口可以理解为是配合继承使用的继承没办法做的事情接口来做在一定程度上接口也做到了代码的服用以及小部分的共性抽取。更好的说法就是两者相互配合使用继承一个类实现多个接口达到强化多态的使用将多态的使用范围扩大不局限于父类不需要每个类都继承父类只需要实现了接口就可以达到多态的使用还可以使程序员忘记类型的存在有了接口之后类的使用者就不必再关注类型只需要关注类是否实现接口即可。 接口是一组对外公开的行为规范准则在JAVA编程语言中是一个抽象类型是抽象方法的集合接口通常以interface来声明。一个类通过实现接口的方式从而实现接口的抽象方法。
http://www.dnsts.com.cn/news/128132.html

相关文章:

  • ps做网站网页制作要学什么
  • 东营高端网站建设手机网站开发建设方案
  • 合山市网站怎么制作游戏app
  • 在线logo设计网站腾讯云一键wordpress
  • 网站 备案 异地免费建设dj网站
  • 信创网站建设做美食的网站哪个好
  • 中文wordpress站点上海天华建筑设计有限公司待遇
  • 攸县网站定制visual studio网页界面设计
  • cms 企业网站wordpress jarida
  • 做电商网站的轻量级数据库wordpress
  • 做企业网站哪家公司好五里桥街道网站建设
  • 开发中英文切换网站如何做如何才能做好品牌网站建设
  • 宁波做网站优化做网站一单能挣多少
  • 免费开源建站系统源码网站页面一般做多大
  • 鞍山兼职吧重庆seo教程
  • 汽车之家网站今天发生的重大新闻事件
  • 网站流量成本网站制作公司石家庄
  • 小白用网站建设工具共享办公室 设计
  • 沈阳网站建设哪里好新闻发布平台
  • 网站建设开发方案电商网站建设设计报告总结
  • 北京国家建设部网站首页赚钱网页
  • 网站开发和浏览器兼容问题文字logo设计生成器
  • 域名解析查询站长工具科大讯飞哪些做教学资源的网站
  • 莆田市的网站建设公司红色企业网站
  • 如何编辑网站网站建设的扩展阶段包括
  • 湟源县公司网站建设免费的网站源码去哪下载
  • 如何做网站后台管理系统深圳代理记账公司电话
  • 图文型官网站做网站找个人还是公司
  • 建美食网站有哪些原因网站建设服务器需要钱吗
  • 网站分哪些类型上海人才网官网网址