接口、设计模式

一、面向对象练习

做题四大原则:

一、继承链:自己没有找父

A

|

B

/ \

C D

二、 编译看类型、确定方法,运行找对象

三、就近最优原则

四、父类引用对子类新增方法不可见

public class Test {public static void main(String[] args) {A a1=new A();  // A and A,A and D//多态调用A a2=new B();  // B and A,A and DB b =new B();  // B and B,B and A,A and DC c=new C();D d =new D();   System.out.println(a1.show(b)); //A and ASystem.out.println(a1.show(c)); //A and ASystem.out.println(a1.show(d)); //A and DSystem.out.println(a2.show(b)); //B and ASystem.out.println(a2.show(c)); //B and ASystem.out.println(a2.show(d)); //A and DSystem.out.println(b.show(b));  //B and BSystem.out.println(b.show(c));  //B and BSystem.out.println(b.show(d));  //A and D}
}
class A{public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}
}
class B extends A{//新增方法public String show(B obj){return ("B and B");}//重写方法@Overridepublic String show(A obj){return ("B and A");}
}
class C extends B{}
class D extends B{}

二、接口

1、介绍

特殊的抽象类,是一个引用数据类型

功能的集合(抽象方法的集合)

PS:类只能单继承,接口可以多实现

接口的优点:

更加灵活

便于后期维护

接口实现解耦(高内聚低耦合)

定义开发规范

PS:当父类和接口都可以使用时,推荐使用接口,但是接口不可以完全取代父类

2、使用

1、在jdk7及以前版本,接口只可以写以下内容:

公共静态常量: public static final(默认可以省略)

公共抽象方法:public abstract(默认可以省略)

2、在jdk8及以后版本新增以下内容:

静态方法: 只能通过接口名.方法名调用

默认方法: 被default修饰的方法

只能通过实现类的重写方法调用

3、注意事项:

1.不能实例化

2.接口需要被实现 通过implements关键字进行实现

3.根据实现类对象使用

具体实现类 : 重写所有的抽象方法 + 按需新增

抽象实现类 : 按需重写抽象方法 + 按需新增

4.类只能单继承类,类可以多实现接口,需要重写多个抽象方法

5.类与接口之间只能是类实现接口,可以多实现

6.接口与接口之间,可以多继承

7.一个类需要先继承后实现

三、设计模式

1、单例模式

1、实现方式:饿汉式 懒汉式

2、设计步骤:

1、私有的构造器

2、私有静态的当前类引用

3、公共静态的访问方式

饿汉式:

class Hungry{private Hungry(){}private static Hungry h=new Hungry();public static Hungry getHungry(){return h;}
}

懒汉式:

class Lazy{private Lazy(){}private static Lazy l;public static Lazy getLazy(){if(l==null) l=new Lazy();return l;}
}

2、代理模式

目前主要讲静态代理

组成:

真实角色

代理角色

条件:

真实角色与代理角色要求实现相同的接口

代理角色需要持有真实角色的引用-->通过属性来维护

代理行为

好处:减少与真实角色的互动,便于后期维护

public class Agency {public static void main(String[] args) {Manager manager=new Manager();Hr hr=new Hr(manager);hr.add();}
}
interface Add{void add();
}
class Manager implements Add{public void add(){System.out.println("录用");}
}
class Hr implements Add{Manager manager;
​public Hr(Manager manager) {this.manager = manager;}public void add(){System.out.println("发布招聘信息");System.out.println("预约面试");manager.add();System.out.println("面试成功");System.out.println("谈薪资");}
}

3、工厂模式

组成:

抽象产品角色:接口|父类

具体产品角色:实现类

工厂角色

import java.util.Scanner;
public class PizzaTest{public static void main(String[] args) {PizzaFactory.MakePizza();}
}
class PizzaFactory{public static void MakePizza(){Scanner sc = new Scanner(System.in);System.out.print("请选择要制作的披萨(1.培根披萨 2.海鲜披萨):");int i = sc.nextInt();switch (i) {case 1:System.out.print("请输入培根克数:");int a = sc.nextInt();System.out.print("请输入披萨大小:");int b = sc.nextInt();System.out.print("请输入披萨价格:");int c = sc.nextInt();Pizza1 p1=new Pizza1(a,b,c);p1.show();break;case 2:System.out.print("请输入配料信息:");String str = sc.next();System.out.print("请输入披萨大小:");int m = sc.nextInt();System.out.print("请输入披萨价格:");int n = sc.nextInt();Pizza2 p2=new Pizza2(m,n,str);p2.show();break;default:System.out.println("没有此类披萨");}}
}
abstract class Pizza{private int price;private int size;public Pizza(){}public Pizza(int price, int size) {this.price = price;this.size = size;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}abstract void show();
}
class Pizza1 extends Pizza{private String name="培根披萨";private int weight;public Pizza1(){}public Pizza1(int price, int size, int weight) {super(price, size);this.weight = weight;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}void show(){System.out.println("名称:"+name+"\n价格:"+getPrice()+"元\n大小:"+getSize()+"寸\n培根克数:"+getWeight()+"克");}
}
class Pizza2 extends Pizza{private String name="海鲜披萨";private String ingredients;public Pizza2(){}public Pizza2(int price, int size, String ingredients) {super(price, size);this.ingredients = ingredients;}public String getIngredients() {return ingredients;}public void setIngredients(String ingredients) {this.ingredients = ingredients;}void show(){System.out.println("名称:"+name+"\n价格:"+getPrice()+"元\n大小:"+getSize()+"寸\n配料信息:"+getIngredients());}
}

re0:从零开始的Java学习生活09(连载)相关推荐

  1. 从零开始的Java学习教程——一:学习JAVA前的准备

    学习Java前的准备 Java简单介绍 为什么学习Java Java开发环境的配置及目录内容简介 环境变量的配置 目录简介 bin include jre lib src Dos命令 DOS简介 打开 ...

  2. Java学习笔记09从认识多态开始

    Day09学习记录 目录 1.多态 2.抽象类 3.接口 1.1多态的概念 某一个事物,在不同时刻表现出来的不同状态. 在使用多态时要注意: a.要有继承关系 b.要有方法重写 c.要有父类引用指向子 ...

  3. 【JAVA学习】09.创建BootstrapTale列表页

    [提要]只要JSON 返回了rows , total ,数据就会展示在列表 [步骤] 1.页面添加Table标签用于装载数据 <table class="table" id= ...

  4. Java学习lesson 09

    与main方法在同一个类中的方法不是静态类如何调用? * ArrayDemo类的对象使用对象调用功能 ArrayDemo ad=new ArrayDemo(): 但由于ArrayDemo为测试类一般要 ...

  5. 从零开始的Linux学习日志

    从零开始的Linux学习日志 从零开始的Linux学习生活 搭建环境 常见的Linux指令 1. echo 2.date 3.reboot和poweroff 4.其他重要指令 小结 从零开始的Linu ...

  6. termite:从零开始的go语言学习生活

    时隔一年.终于下定决心认真的学习一下golang,为此昨天纠结了好久要不要买一个正版的goland,最后还是没舍得买-为什么要学习go呢?如今在当前这家公司已经工作两年,悠哉的生活使我日日堕落-体重长 ...

  7. 连载一: 无限互联——我的学习生活

    连载一: 无限互联--我的学习生活   hello!every body.welcome to my e-home. 在这里,我很高兴向大家介绍我最近的学习工作状态. 哈哈!很期待吧. 我最近并没有像 ...

  8. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】

    http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA         从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...

  9. 2016最新Java学习计划

    一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码        第一阶段 Java基础 入门 学习周期: 35天 ...

最新文章

  1. 通俗易懂:8大步骤图解注意力机制
  2. hadoop W3SCHOOL
  3. 大部分公司并不需要微服务
  4. ASP.NET页面指令
  5. 二叉排序树(完整案例与完整C语言代码)
  6. (原创)SpringBoot入门
  7. 前端学习(1117):严格模式的变化
  8. yii2 ajax分页,Yii框架分页技术实例分析
  9. java图片压缩不失真_软件分享 | Lit图片压缩
  10. java jdom 设置第1行_Java通过jdom操作生成XML文件的实例代码下载
  11. 服务器不能访问共享文件夹权限,win访问服务器共享文件夹权限设置
  12. Java 读取文件大写和格式化输出字串
  13. .NET生成静态页面并分页
  14. 六面美团后,我有一个重要的发现...
  15. 基于Java毕业设计在线购书商城系统源码+系统+mysql+lw文档+部署软件
  16. 河北省计算机考试报名的照片要求,「河北省考」河北公务员考试报名照片制作在线处理照片教程...
  17. RRZCMS安全防护建议
  18. 北京发布《北京市交通出行数据开放管理办法(试行)》
  19. DRM in Android
  20. 孩子成长-跟同学相处

热门文章

  1. java出版社系统_图书管理系统java版
  2. odoo14Vscode调试环境
  3. 仿网易考拉完整源码+答辩ppt(java+mysql+JavaScript)资源详细说明
  4. dlib.get_frontal_face_datector()人脸位置检测
  5. Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
  6. “团队奖金包”让年终奖更公平
  7. Matlab 求矩阵的中值
  8. 直男七夕送礼指南,这四款总有你女票的菜
  9. H5手绘地图(自定义栅格图层)踩坑
  10. CodeForces 13A【暴力】