re0:从零开始的Java学习生活09(连载)
接口、设计模式
一、面向对象练习
做题四大原则:
一、继承链:自己没有找父
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(连载)相关推荐
- 从零开始的Java学习教程——一:学习JAVA前的准备
学习Java前的准备 Java简单介绍 为什么学习Java Java开发环境的配置及目录内容简介 环境变量的配置 目录简介 bin include jre lib src Dos命令 DOS简介 打开 ...
- Java学习笔记09从认识多态开始
Day09学习记录 目录 1.多态 2.抽象类 3.接口 1.1多态的概念 某一个事物,在不同时刻表现出来的不同状态. 在使用多态时要注意: a.要有继承关系 b.要有方法重写 c.要有父类引用指向子 ...
- 【JAVA学习】09.创建BootstrapTale列表页
[提要]只要JSON 返回了rows , total ,数据就会展示在列表 [步骤] 1.页面添加Table标签用于装载数据 <table class="table" id= ...
- Java学习lesson 09
与main方法在同一个类中的方法不是静态类如何调用? * ArrayDemo类的对象使用对象调用功能 ArrayDemo ad=new ArrayDemo(): 但由于ArrayDemo为测试类一般要 ...
- 从零开始的Linux学习日志
从零开始的Linux学习日志 从零开始的Linux学习生活 搭建环境 常见的Linux指令 1. echo 2.date 3.reboot和poweroff 4.其他重要指令 小结 从零开始的Linu ...
- termite:从零开始的go语言学习生活
时隔一年.终于下定决心认真的学习一下golang,为此昨天纠结了好久要不要买一个正版的goland,最后还是没舍得买-为什么要学习go呢?如今在当前这家公司已经工作两年,悠哉的生活使我日日堕落-体重长 ...
- 连载一: 无限互联——我的学习生活
连载一: 无限互联--我的学习生活 hello!every body.welcome to my e-home. 在这里,我很高兴向大家介绍我最近的学习工作状态. 哈哈!很期待吧. 我最近并没有像 ...
- JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】
http://bbs.51cto.com JAVE EE 企业级开发之从零开始学JAVA 从零开始学JAVA?YES!本刊内容全部为午饭redking整理.撰写,所涉及内容均为原创,非 ...
- 2016最新Java学习计划
一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码 第一阶段 Java基础 入门 学习周期: 35天 ...
最新文章
- 通俗易懂:8大步骤图解注意力机制
- hadoop W3SCHOOL
- 大部分公司并不需要微服务
- ASP.NET页面指令
- 二叉排序树(完整案例与完整C语言代码)
- (原创)SpringBoot入门
- 前端学习(1117):严格模式的变化
- yii2 ajax分页,Yii框架分页技术实例分析
- java图片压缩不失真_软件分享 | Lit图片压缩
- java jdom 设置第1行_Java通过jdom操作生成XML文件的实例代码下载
- 服务器不能访问共享文件夹权限,win访问服务器共享文件夹权限设置
- Java 读取文件大写和格式化输出字串
- .NET生成静态页面并分页
- 六面美团后,我有一个重要的发现...
- 基于Java毕业设计在线购书商城系统源码+系统+mysql+lw文档+部署软件
- 河北省计算机考试报名的照片要求,「河北省考」河北公务员考试报名照片制作在线处理照片教程...
- RRZCMS安全防护建议
- 北京发布《北京市交通出行数据开放管理办法(试行)》
- DRM in Android
- 孩子成长-跟同学相处
热门文章
- java出版社系统_图书管理系统java版
- odoo14Vscode调试环境
- 仿网易考拉完整源码+答辩ppt(java+mysql+JavaScript)资源详细说明
- dlib.get_frontal_face_datector()人脸位置检测
- Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
- “团队奖金包”让年终奖更公平
- Matlab 求矩阵的中值
- 直男七夕送礼指南,这四款总有你女票的菜
- H5手绘地图(自定义栅格图层)踩坑
- CodeForces 13A【暴力】