Java abstract 理解和学习

/**
 * <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 - [email protected]
     */
    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.

原文地址:https://www.cnblogs.com/jasonandy/p/9821185.html

时间: 2024-10-11 11:50:49

Java abstract 理解和学习的相关文章

java abstract与interface解析

java abstract与interface解析 abstract 定义 在面向对象的概念中,所有的对象都是通过类来描述.但是,反过来,不是所有的类都是用来描述对象的(把类具体化).如果一个类没有包含足够的信息来描述一个具体的对象,那么这个类就是抽象类. 比如,我们进行一个图形编辑软件的开发,就会发现问题域中存在圆,三角形这样一些具体的概念,它们是不同的,但是它们又都属于形状这样一个概念.形状这个概念在问题域中是不存在的,它就是一个抽象的概念.正是因为抽象的概念在问题领域没有对应的具体概念,所

C++的.h和.cpp根据java来理解

因为要学习cocos2dx所以要学习c++开发然后在学习中看到.h 和 .cpp文件. .h文件进行接口定义,没有具体的实现.很明显跟java的interface一样的作用. .cpp文件是具体的代码实现.跟java类比就是具体的类实现上面定义的interface的类. 这种.h 和.cpp的方式是Opp编程体现吧. 用.h 和 java 用interface都拥有的好处: 抽象逻辑,抽象出层次,方便理解和维护代码.如果做对外开放api,对外可以公布接口,保留代码.这样做比较迅速快捷. 用接口抽

201671010117 2016-2017-2 《Java程序设计》Java第三周学习心得

Java第三周学习心得 通过这一周的学习,了解到了Java的核心部分,理解了用户自定义类的定义 ,了解了对象的声明 ,了解了使用构造函数初始化对象 ,使用类属性与方法的使用,了解了package和import语句的用途,知道了假设你面对现实世界的一个对象,你不会把它的属性和处理方法分开,程序设计也是一样.面向对象程序设计(OOP):一种新的思维方法,更接近人类处理现实世界问题的自然表示方法.面向对象的语言有:C++,Smalltalk,Java等.面向对象程序设计的几个主要概念:抽象数据类型.类

Java反射机制的学习

Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Java反射机制没啥用.或许在J2EE.J2SE等平台,Java反射机制没啥用(具体我也不了解,不多做评论),但是在Android应用开发中,该

JAVA个人理解

为了找到别人写的好文章,先分享下自己的知识,找找感觉路线. 学java前接触的c,后来转向java.第一个照面理解的就是面向对象,没想到让我想了好多年.当时有个负责任的老师说面向对象这个词具体释义众说纷纭,有自己的理解就好.于是java从开始就和高深神秘的"面向对象"挂钩. 里边的逻辑和其它编程逻辑差不多,表达同一些意思.至于java的核心,异常.继承.接口,没怎么用过,知道是用来做什么的,看上去还是让人觉得很麻烦,不是很懂. 很多语言也可以做到这些,只是在java里是不得不这样做,它

[转载] Java反射机制的学习

本文转载自: http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Ja

Java I/O系统学习系列二:输入和输出

编程语言的I/O类库中常使用流这个抽象概念,它代表任何有能力产出数据的数据源对象或者是有能力接收数据的接收端对象.“流”屏蔽了实际的I/O设备中处理数据的细节. 在这个系列的第一篇文章:<<Java I/O系统学习系列一:File和RandomAccessFile>>中,我们讲到RandomAccessFile可以写入和读取文件,具备I/O功能,但是其只能针对文件,而I/O还涉及到很多其他场景比如网络.读取内存中的字符串等,所以Java类库中提供了一系列的类库来对其进行支持,也就是

张玉晶 201871010135《面向对象程序设计(java)》课程学习总结

经历了一个学期的<面向对象程序设计>课程学习,请每位同学完成以下任务: 点击链接,完成课程问卷调查. 总结这门课程的学习给你带来的提升,包括以下内容: 统计在课程学习中,你学习了多少个程序案例,合计有多少行代码? 统计在课程学习中,你编写了多少个程序,合计有多少行代码? 学习的程序案例数 134 学习的程序案例代码行数  8000 编写的程序数 16 编写的程序代码行数  2300 你的15次课程作业分别花了多少时间,平均作业时间是多少?(做一个列表) 周次 花费时间(小时) 第一周 5 第二

Java虚拟机理解总结

??Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的虚拟计算机,Java虚拟机屏蔽了与具体操作系统的相关性,使得Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上运行.正是Java虚拟机使得Java程序能够做到"编译一次,到处运行",成就了Java.作为Java程序员,必须对Java虚拟机有学习理解,才能做好Java程序开发.当然这里的学习理解只是基本的虚拟机规范的理解,具体细节的理解掌握就太难了,对于Java开发来说也