/**
* <html>
* <body>
* <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年</p>
* <p> Created by Jason </p>
* </body>
* </html>
*/
package cn.ucaner.core.absinf; /**
* @Package:cn.ucaner.core.absinf
* @ClassName:AbsInfDemo
* @Description: <p> AbsInfDemo - 接口和抽象类的学习 {@link https://www.cnblogs.com/danbing/p/5035189.html}
*
* 最近学习Spring的源码 仿Spring实现
* 里面用到大量的抽象类和接口 概念比较模糊 故整理出来学习
*
* 一.抽象类
* 1、抽象类
* 1).包含一个抽象方法的类就是抽象类
* 2、抽象方法
* 1).声明而未被实现的方法,抽象方法必须使用abstract关键词字声明
* 3、抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法
* 4、抽象类不能被直接实例化,要通过其子类进行实例化
* 5、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法
* 6、子类中的抽象方法不能与父类的抽象方法同名
* 7、abstract不能与final并列修饰同一个类
* 8、abstract 不能与private、static、final或native并列修饰同一个方法
*
*
*
*
* https://www.cnblogs.com/GreatKing/p/6077912.html
* 什么时候使用接口,什么时候使用抽象类?
* 1.如果你想拥有一些方法,并且这些方法有默认实现,那么久使用抽象类
* 2.如果你想实现多继承,那么就是用接口吧,java不支持多继承,但是可以实现多个接口
* 3.接口主要用于模块与模块之间的调用
* 4.抽象类主要用于当做基础类使用,即基类
*
* consider: {@code cn.ucaner.alpaca.framework.utils.tools}
*
* @see https://github.com/Jasonandy/alpaca 可以参考alpaca common里的tools里面的代码规范.
*
* </p>
* @Author: - Jason
* @CreatTime:2018年6月2日 上午11:02:18
* @Modify By:
* @ModifyTime: 2018年6月2日
* @Modify marker:
* @version V1.0
*/
public class AbsInf { }
/**
* <html>
* <body>
* <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年</p>
* <p> Created by Jason </p>
* </body>
* </html>
*/
package cn.ucaner.core.absinf.abs; /**
* @Package:cn.ucaner.core.absinf
* @ClassName:Printer
* @Description: <p> Printer 打印的抽象类 - 接口是抽象类的形式.
* https://www.cnblogs.com/beanmoon/archive/2012/12/06/2805221.html
* </p>
* @Author: - Jason
* @CreatTime:2018年6月2日 上午11:10:08
* @Modify By:
* @ModifyTime: 2018年6月2日
* @Modify marker:
* @version V1.0
*/
public abstract class Printer { public void open() {
System.out.println("Printer Open.");
} public void close() {
System.out.println("Printer Closed.");
} /**
* @Description: 抽象方法 - print - 子类必须实现
* @Autor: Jason - jasonandy@hotmail.com
*/
abstract void print(); }
/**
* <html>
* <body>
* <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年</p>
* <p> Created by Jason </p>
* </body>
* </html>
*/
package cn.ucaner.core.absinf.abs; /**
* @Package:cn.ucaner.core.absinf
* @ClassName:HPPrinter
* @Description: <p> HP extends Printer NOT implement </p>
* @Author: - Jason
* @CreatTime:2018年6月2日 上午11:15:03
* @Modify By:
* @ModifyTime: 2018年6月2日
* @Modify marker:
* @version V1.0
*/
public class HPPrinter extends Printer{ @Override
void print() {
System.out.println("Hello , I'm HP Printer.");
} public static void main(String[] args) { Printer p = new HPPrinter();
p.open();
p.print();
p.close();
}
}
//Outputs
//Printer Open.
//Hello , I'm HP Printer.
//Printer Closed.
/**
* <html>
* <body>
* <P> Copyright JasonInternational Since 1994 https://github.com/Jasonandy/Spring-Core</p>
* <p> All rights reserved.</p>
* <p> Created on 2018年</p>
* <p> Created by Jason </p>
* </body>
* </html>
*/
package cn.ucaner.core.absinf.abs; /**
* @Package:cn.ucaner.core.absinf
* @ClassName:EpsonPrinter
* @Description: <p> Epson </p>
* @Author: - Jason
* @CreatTime:2018年6月2日 上午11:17:29
* @Modify By:
* @ModifyTime: 2018年6月2日
* @Modify marker:
* @version V1.0
*/
public class EpsonPrinter extends Printer{ @Override
void print() {
System.out.println("Hi , I'm Epson Printer.");
} public static void main(String[] args) {
Printer p = new EpsonPrinter();
p.open();
p.print();
p.close();
}
} //Outputs
//Printer Open.
//Hi , I'm Epson Printer.
//Printer Closed.

最新文章

  1. java第二周周学习总结
  2. 学习微信小程序之css12设置盒子内容的宽高
  3. PHP5不重新编译,如何安装自带的未安装过的扩展,如soap扩展?
  4. windows 开机启动 CassiniDev(IIS替代软件)
  5. 【转】Wince中文乱码解决方法
  6. 使用Chrome或Fiddler抓取WebSocket包
  7. 用JS制作简易的可切换的年历,类似于选项卡
  8. 【转贴】-- 基于QT的跨平台应用开发
  9. Netbeans 中的编译器相关配置
  10. C# 中如何判断某个字符串是否为空的方法
  11. [工作积累] android 中添加libssl和libcurl
  12. js判断是否微信浏览器打开
  13. SQL中常用的时间格式
  14. BZOJ 1269 文本编辑器 Splay
  15. 部署LNMP架构Blog博客平台 ---惟净
  16. iOS安全攻防之使用 Charles 进行网络数据抓包 和 Paros 网络抓包
  17. 《Python编程从入门到实践》_第五章_if语句
  18. CSS3集锦之新增选择器、圆角、阴影、透明度、transition动画、transform变形、animation动画
  19. 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上
  20. App瘦身、性能优化总结

热门文章

  1. 数据结构Java版之基数排序(四)
  2. [Gamma]Scrum Meeting#1
  3. mybatis-generator 模板
  4. Spark2.x(六十三):(Spark2.4)Driver如何把Task(闭包等)分配给Executor
  5. scrapy中的Pipeline
  6. java读取IFC文件
  7. (原)理解码率控制模式(x264,x265,vpx)
  8. LeetCode_453. Minimum Moves to Equal Array Elements
  9. idea内置tomcat中java代码热更新
  10. Javacript Remove Elements from Array