Java微服务学习 第九天 接口 内部类
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微服务学习 第九天 接口 内部类相关推荐
- Java微服务学习笔记(一):微服务架构的概念理解
Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...
- Java微服务学习路线,启发学习思路,不要死磕
前言 今天讲讲大家都在搞的微服务框架,其实我们一搜都能搜到的,什么SpringCloud的五大组件,然后大家就开始埋头搭环境,最后费了半天功夫能跑了,但实际上对于微服务的理解还是浅尝辄止,今天我们就来 ...
- 十款优质企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)
Java微服务开源项目 前言 一.pig 二.zheng 三.SpringBlade 四.SOP 五.matecloud 六.mall 七.jeecg-boot 八.Cloud-Platform 九. ...
- java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
java微服务,微在哪 标准Java Maps需要在启动时进行初始化. 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps. 内置的Map ...
- guns 最新开源框架企业版下载_国内比较火的5款Java微服务开源项目
本文介绍国内比较火的5款Java微服务开源项目,pig是基于Spring Cloud.OAuth2.0.Vue的前后端分离的系统. 通用RBAC权限设计及其数据权限和分库分表 支持服务限流.动态路由. ...
- Java微服务篇2——SpringCloud
Java微服务篇2--SpringCloud 1.微服务架构 1.1.单体应用架构 的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个Tomcat容器中的 ...
- 国内最火5款Java微服务开源项目
国内最火5款Java微服务开源项目 目录 1.pig 2.zheng 3.Cloud-Platform 4.SpringBlade 5.Guns PIG 开源地址:https://gitee.com/ ...
- Java 微服务框架选型(Dubbo 和 Spring Cloud?),大厂 HR 如何面试
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 微服 ...
- Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势
摘要: 目前,Spring Cloud在国内的知名度并不高,在前阵子的求职过程中,与一些互联网公司的架构师.技术VP或者CTO在交流时,有些甚至还不知道该项目的存在.可能这也与国内阿里巴巴开源服务治理 ...
最新文章
- 最小割 ---- 集合冲突模型 ----- P1646 [国家集训队]happiness
- 在Mybatis3开发中与配置相关的7点体会
- linux备份svn仓库脚本,SVN服务备份操作步骤分享
- 谈谈我自己(创业四个多月)
- 使用rabbitMQ实现数据同步
- datatable绑定comboBox显示数据[C#]
- 单链表基本操作在主函数中的实现
- Java的子类可以继承父类的静态变量和静态方法吗?
- 程序员顶尖和普通就是有5个区别!
- 【感悟】本书书名无法描述本书内容(二)
- linux mantis安装包,Linux下安装mantis
- 高中计算机竞赛学什么,什么是高中数学竞赛,要怎么去做?
- KF与无迹卡尔曼滤波详解
- lol 如何进行拉扯
- Word2019表格文字一直无法上下对齐的解法
- 【图像处理笔记】图像分割之聚类和超像素
- Unity 之 ShaderGraph Input节点解析汇总
- 我为什么而活着——对知识的向往,对爱情的追求
- building workspace
- VC-VQA: Visual Calibration Mechanism for Visual Question Answering (VQA的视觉校准机制)
热门文章
- Sigmoid激活的是第几维呢?
- [拜读系列]SEC'' 2018: ACM/IEEE Symposium on Edge Computing 总结(二)
- 宝马将系统架上微软Azure,国内科技巨头也难抵汽车“诱惑”
- 普通人的2022前端秋招总结
- angular判断用户设备为移动设备还是PC
- 蓝牙 - 关于5.0版本的一些解释
- Kirchhoff's laws
- 中国诗歌艺术11诗的魅惑:中国诗歌的几个基本元素之选音与读音
- Java之HashMap系列--ConcurrentHashMap的原理
- GDKOI2016 Day1 T2 不稳定的传送门