2.接口

当抽象类中所有方法都是抽象方法的时候,那么这个类是一个特殊的抽象类,叫接口 接口是java中最重要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。 格式: interface 接口名{} 接口中的成员修饰符是固定的。 成员常量:public static final 成员函数:public abstract 发现接口中的成员都是public的。

public interface USB {public static final  int AGE=0;//public abstract void study1();//灰色的可以省略  方法名和常量名不能删default void add(){System.out.println("这是一个普通方法");study();eat();play();}void study();void eat();void play();
​
}
​
public class TestUsb implements USB {
​@Overridepublic void study() {System.out.println("学习");}
​@Overridepublic void eat() {System.out.println("吃饭");}
​@Overridepublic void play() {System.out.println("打篮球");}
​public static void main(String[] args) {TestUsb testUsb = new TestUsb();testUsb.add();
​}

defalt来修饰:

接口的出现将“多继承”通过另一种方式体现出来,即“多实现”

接口的特点:

1.接口是对外暴露的原则

2.接口是程序的功能拓展

3.接口的出现降低耦合性 高内聚,低耦合

4.接口可以用来多实现

5.类与接口之间是实现关系,而且类可以继承一个类的同时还可以实现多个接口

6.接口与接口直接可以有继承关系

接口为类:com.zx.dao

借口实现包:com.zx.dao.impl

第三大特征 - 多态

什么是多态

简单来说,多态就是一个对象具有多种形态

向同一父类

instanceof 是 java的保留关键字

它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean的数据类型

package com.zx.test1;
​
import com.zx.beans1.Animal;
import com.zx.beans1.Cat;
import com.zx.beans1.Dog;
​
public class AnimalTest {public static void main(String[] args) {Animal animal = new Dog();// animal.eat();Animal animal2 = new Cat();animal2.eat();if (animal instanceof Cat){Cat cat =(Cat) animal2;}else {System.out.println("类型不兼容");}if (animal instanceof Dog){Dog dog =(Dog) animal;animal.eat();}else {System.out.println("类型不兼容");}
​}
​
}

3.作业

第三题:分析以下需求,并用代码实现 1.定义动物类: 属性: 年龄行为: 喝水,吃东西(吃什么不确定) 2.定义游泳接口: 行为: 游泳方法 3.定义狗类: 行为: 吃饭(啃骨头)和游泳(狗刨) 4.定义羊类: 行为: 吃饭(羊啃草) 5.定义青蛙类: 行为: 吃饭(吃虫子)和游泳(蛙泳) 6.定义饲养员类: 行为: 饲养动物:包括吃饭和喝水 7.定义测试类: 创建饲养员对象,饲养员调用三次饲养方法:饲养狗,饲养羊,饲养青蛙

要求: 1子类重写父类中的吃东西方法 2.要求给狗和青蛙添加游泳的方法(实现游泳接口) 3.饲养员类中定义一个方法,传入动物类对象(父类), 调用吃饭方法,如果有游泳方法也需进行测试 4.打印如下格式的结果: 喝水 狗啃骨头 狗会狗刨游泳 喝水 青蛙吃小虫青蛙会蛙泳 喝水 I 羊啃草

package com.动物题.beans;
​
public abstract class Animal {public void drink(){System.out.println("喝水");}public abstract void eat();
​
}
-----------------------------------------------------------------
package com.动物题.beans;
​
public class Dog   extends Animal  implements Swim{
​@Overridepublic void eat() {System.out.println("狗啃骨头");}
​@Overridepublic void swim() {System.out.println("狗会狗刨游泳");}
}
-----------------------------------------------------------------
package com.动物题.beans;
​
public class Frog extends Animal  implements Swim{@Overridepublic void eat() {System.out.println("吃虫子");}
​@Overridepublic void swim() {System.out.println("蛙泳");}
}
--------------------------------------------------------------------
package com.动物题.beans;
​
public class Person {
​
​public void feed(Animal animal) {animal.drink();animal.eat();
​if (animal instanceof Dog) {//Dog dog =(Dog) animal;dog.swim();}else if (animal instanceof Frog){((Frog) animal).swim();}}
}
​
​
--------------------------------------------------------------------
package com.动物题.beans;
​
public class Sheep extends Animal {@Overridepublic void eat() {System.out.println("羊啃草");}
}
--------------------------------------------------------------
package com.动物题.beans;
​
public interface Swim {void swim();
}
-----------------------------------------------------------------
package com.动物题.test;
​
import com.动物题.beans.Dog;
import com.动物题.beans.Frog;
import com.动物题.beans.Person;
import com.动物题.beans.Sheep;
​
public class Test {public static void main(String[] args) {Person person = new Person();Sheep sheep = new Sheep();Frog frog = new Frog();Dog dog = new Dog();person.feed(dog);person.feed(frog);person.feed(sheep);
​
​
​}
}
​

第四题:地上有一群鸟,一声枪响,有的吓得飞走了,有的吓得跑走了

提示:创建会飞的鸟的实体类FlyBird,创建会跑的鸟 的实体类RunBird,统一继承鸟类Bird 一声枪响(对鸟类下命令,执行run(),不同的子类执行不同的行为) 测试类中:创建鸟类数组,Bird[] birds = new Bird[20]; 利用随机数,依照不同的随机数实例化不同的子类,然后统一调用run方法执行

package com.zx.beans;
​
public interface Bird {void run();
​
​
}
---------------------------------------------------------------------
package com.zx.beans;
​
public class FlyBird implements Bird {@Overridepublic void run() {System.out.println("鸟飞了");}
}
----------------------------------------------------------------------------
package com.zx.beans;
​
public class RunBird implements Bird {@Overridepublic void run() {System.out.println("鸟跑了");}
}
----------------------------------------------------------------------------
package com.zx.test;
import java.util.Random;
import com.zx.beans.Bird;
import com.zx.beans.FlyBird;
import com.zx.beans.RunBird;
​
public class Test {public static void main(String[] args) {Bird[] birds = new Bird[20];Random r = new Random();FlyBird flyBird = new FlyBird();RunBird runBird = new RunBird();for (int i = 0; i <birds.length ; i++) {int number = r.nextInt(2);
​if (number==1){birds[i]=flyBird;// flyBird.run();}else {birds[i]=runBird;//runBird.run();}birds[i].run();}}
}
​

7.16、内部类

类的内部可以定义另一个类,如果在类Outer的内部再定义一个Inner,此时Inner称为内部类,Outer称为外部类。

1)成员内部类

可以使用修饰符修饰

Ⅰ、访问方法:

外部方法中创建内部类对象,调用内部类方法

外部类.内部类 内部类对象 = 外部类实例.内部类实例

package com.Mar.beans3;
​
public class Outer01 {private int age;public void out_method(){System.out.println("外部类方法");Inner inner = new Inner();  //创建内部类对象inner.in_method();}public class Inner{//内部类private int id;public void in_method(){System.out.println("内部类方法");}}
​public class Inner2{
​}
}
​
​
package com.Mar.test;
​
import com.Mar.beans3.Outer01;
​
public class OuterTest {public static void main(String[] args) {Outer01 outer01 = new Outer01();//outer01.out_method();
​//直接找内部类:外部类.内部类 内部类对象 = 外部类实例.内部类实例;Outer01.Inner outerIn01 = new Outer01().new Inner();outerIn01.in_method();Outer01.Inner outerIn02 = outer01.new  Inner();outerIn02.in_method();}
}
​

Ⅱ、变量调用

成员内部类中方法中的局部变量,调用外部类或内部类中重名的成员变量:

//方法中的局部变量:变量
//内部类中的成员变量:this.变量
//外部类中的成员变量:外部类类名.this.变量
​
package com.Mar.beans3;
​
public class Outer01 {private int age = 30;public void out_method(){System.out.println("外部类方法");Inner inner = new Inner();  //创建内部类对象inner.in_method();}public class Inner{//内部类private int id;private int age = 20;public void in_method(){int age = 30;System.out.println("内部类方法" + age + " " + this.age + " " + Outer01.this.age);//输出顺序:30 20 18}}
​public class Inner2{
​}
}
​

2)静态内部类

Ⅰ、访问方法:

package com.Mar.beans3;
​
public class Outer02 {private int id;public void out_method(){System.out.println("外部类方法");}public static class Inner02{public void in_method(){System.out.println("内部类方法");}}
}
​
package com.Mar.test;
​
import com.Mar.beans3.Outer02;
​
public class Outer02Test {public static void main(String[] args) {//外部类.内部类 内部类对象= new 外部类名称.内部类名称();Outer02.Inner02 inner02 = new Outer02.Inner02();inner02.in_method();}
}
​

3)方法内部类(认识)

package com.Mar.beans3;
​
public class Outer03 {private int id;public void out_method(){System.out.println("外部类方法");class Inner03{private int id;public void in_method(){System.out.println("内部类方法");}}}
}

4)匿名内部类

Java微服务学习 第九天 接口 内部类相关推荐

  1. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  2. Java微服务学习路线,启发学习思路,不要死磕

    前言 今天讲讲大家都在搞的微服务框架,其实我们一搜都能搜到的,什么SpringCloud的五大组件,然后大家就开始埋头搭环境,最后费了半天功夫能跑了,但实际上对于微服务的理解还是浅尝辄止,今天我们就来 ...

  3. 十款优质企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

    Java微服务开源项目 前言 一.pig 二.zheng 三.SpringBlade 四.SOP 五.matecloud 六.mall 七.jeecg-boot 八.Cloud-Platform 九. ...

  4. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务

    java微服务,微在哪 标准Java Maps需要在启动时进行初始化. 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps. 内置的Map ...

  5. guns 最新开源框架企业版下载_国内比较火的5款Java微服务开源项目

    本文介绍国内比较火的5款Java微服务开源项目,pig是基于Spring Cloud.OAuth2.0.Vue的前后端分离的系统. 通用RBAC权限设计及其数据权限和分库分表 支持服务限流.动态路由. ...

  6. Java微服务篇2——SpringCloud

    Java微服务篇2--SpringCloud 1.微服务架构 1.1.单体应用架构 的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个Tomcat容器中的 ...

  7. 国内最火5款Java微服务开源项目

    国内最火5款Java微服务开源项目 目录 1.pig 2.zheng 3.Cloud-Platform 4.SpringBlade 5.Guns PIG 开源地址:https://gitee.com/ ...

  8. Java 微服务框架选型(Dubbo 和 Spring Cloud?),大厂 HR 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 微服 ...

  9. Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势

    摘要: 目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师.技术VP或者CTO在交流时,有些甚至还不知道该项目的存在.可能这也与国内阿里巴巴开源服务治理 ...

最新文章

  1. 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness
  2. 在Mybatis3开发中与配置相关的7点体会
  3. linux备份svn仓库脚本,SVN服务备份操作步骤分享
  4. 谈谈我自己(创业四个多月)
  5. 使用rabbitMQ实现数据同步
  6. datatable绑定comboBox显示数据[C#]
  7. 单链表基本操作在主函数中的实现
  8. Java的子类可以继承父类的静态变量和静态方法吗?
  9. 程序员顶尖和普通就是有5个区别!
  10. 【感悟】本书书名无法描述本书内容(二)
  11. linux mantis安装包,Linux下安装mantis
  12. 高中计算机竞赛学什么,什么是高中数学竞赛,要怎么去做?
  13. KF与无迹卡尔曼滤波详解
  14. lol 如何进行拉扯
  15. Word2019表格文字一直无法上下对齐的解法
  16. 【图像处理笔记】图像分割之聚类和超像素
  17. Unity 之 ShaderGraph Input节点解析汇总
  18. 我为什么而活着——对知识的向往,对爱情的追求
  19. building workspace
  20. VC-VQA: Visual Calibration Mechanism for Visual Question Answering (VQA的视觉校准机制)

热门文章

  1. Sigmoid激活的是第几维呢?
  2. [拜读系列]SEC'' 2018: ACM/IEEE Symposium on Edge Computing 总结(二)
  3. 宝马将系统架上微软Azure,国内科技巨头也难抵汽车“诱惑”
  4. 普通人的2022前端秋招总结
  5. angular判断用户设备为移动设备还是PC
  6. 蓝牙 - 关于5.0版本的一些解释
  7. Kirchhoff's laws
  8. 中国诗歌艺术11诗的魅惑:中国诗歌的几个基本元素之选音与读音
  9. Java之HashMap系列--ConcurrentHashMap的原理
  10. GDKOI2016 Day1 T2 不稳定的传送门