------- android培训java培训、期待与您交流!
----------

抽象定义:

          抽象就是从多个事物中将共性的,本质的内容抽取出来。

          例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。



抽象类:

          Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。



抽象方法的由来:

          多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。

          例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。

什么时候使用抽象类:

当多个类中出现相同功能,但是功能主体不同,

          这是可以进行向上抽取。这时,只抽取功能定义,而不抽取功能主体。

 

         抽象大白话来说就是看不懂,抽象类和一般类没有太大的不同。 

         该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。 

         这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。 

         通过抽象方法来表示。 

 

抽象类的特点:

1,抽象方法一定在抽象类中。

2,抽象方法和抽象类都必须被abstract关键字修饰。

3,抽象类不可以用new创建对象。因为调用抽象方法没意义。

4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。 

 

抽象类和一般类的区别:

抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。 

       抽象类不可以实例化。

 

       特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

abstract 关键字,和哪些关键字不能共存?           finnal,private,static 

        final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。 

        private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。 

        static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。

 

抽象类中是否有构造函数?

        有,抽象类是一个父类,要给子类提供实例的初始化。

/**
* 抽象类的演示:
*
*/ abstract class Student //只要类中有抽象方法,类就必须声明为抽象
{
abstract void study(); //子类必须覆写该方法
} class BaseStudent extends Student
{
void study()
{
System.out.println("base study");
}
} class AdvStudent extends Student
{
void study()
{
System.out.println("adv study");
}
} public class AbstractDemo
{
public static void main(String[] args)
{
new BaseStudent().study();
new AdvStudent().study();
}
}
/**
* 模板设计模式
* 当定义功能时,一部分内容是确定的,一部分是不确定的,这时就要把不确定的部分暴漏出去。
*
* 例:获取某一程序的运行时间
*
*/ public class TemplateDemo
{
public static void main(String[] args)
{
new SubTime().etTime();
}
} abstract class GetTime
{
//函数功能:获取runCode函数程序运行时间
public final void etTime()//此函数声明出去但是不需要被子类覆写修改,用final修饰
{
long start = System.currentTimeMillis();
runCode();
long end = System.currentTimeMillis(); System.out.println("The code run time is : "+(end-start)+" ms");
} public abstract void runCode();//因为要运行的程序不确定,所以要子类覆写 } class SubTime extends GetTime
{
public void runCode()
{
int sum = 0;
for (int x=1;x<=40000;x++)
{
sum += x;
System.out.println(sum);
}
}
}

接口

初期理解,可以认为是一个特殊的抽象类。当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。

接口定义时,格式特点:

1,接口中常见定义:常量,抽象方法。

2,接口中的成员都有固定修饰符。常量:public static final   方法:public abstract

     记住:接口中的成员都是public的。

class用于定义类。   interface 用于定义接口。

接口中的成员修饰符是固定的。

   成员常量:public static final

   成员函数:public abstract

接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
还可以在继承的同时实现多接口 class XXX exdents XXX implements XX , XX  因为没有方法主体,可以由子类随意定义。

接口特点:

接口是对外暴露的规则。

   接口是程序的功能扩展。

   接口可以用来多实现。

   类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。

   接口与接口之间可以有继承关系。

接口是不可以创建对象的,因为有抽象方法。需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。

接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

/**
*
* 接口interface程序演示
*
*/ //定义一个接口
interface Inter
{
//定义常量常用格式public static final,常量名一般全大写
public static final double PI = 3.1415926;
//定义函数常用格式 public abstract
public abstract void show ();
} //定义一个类实现接口
class InterTest implements Inter
{
public void show()
{
System.out.println("PI = "+PI);
}
} public class InterfaceDemo
{
public static void main(String[] args)
{
new InterTest().show();
}
}

------- android培训java培训、期待与您交流!
----------

黑马程序员——JAVA基础之抽象和接口 , 模版方法设计模式的更多相关文章

  1. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  2. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  3. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  4. 黑马程序员——JAVA基础之File类,递归,打印流,合并切割流

    ------- android培训.java培训.期待与您交流! ---------- File类 用来将文件或者文件夹封装成对象 方便对文件与文件夹的属性信息进行操作. File对象可以作为参数传递 ...

  5. 黑马程序员——JAVA基础之简述设计模式

    ------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...

  6. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  7. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  8. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  9. 黑马程序员——JAVA基础之异常处理机制

    ------- android培训.java培训.期待与您交流! ---------- 异常:就是程序在运行时出现不正常情况. 异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式 ...

随机推荐

  1. python练习——最长的递减子序列

    题目: 求一个数组的最长递减子序列比 , 如随机生成一组序列 {8,9,6,3,6,2,3,4}   求得最长递减序列 {9,8,6,4,3,2} list=[3,3,3,3,6,2,3,4] //冒 ...

  2. JavaScript之document对象使用

    1.document 对象常用的有三种: A.document.getElementById:通过html元素的Id,来获取html对象.适用于单个的html元素. B.document.getEle ...

  3. 知道创宇CTO杨冀龙:网络安全人才决定行业格局

    去年的时候,我曾经在团队内部分享了一个“网络安全人才迁徙图”,被圈子里的同行广为传播.几乎所有行业的安全人士都表示:国内网络安全行业人才资源情况并不乐观——有着10年以上网络安全行业经验的核心安全人才 ...

  4. maven3在eclipse3.4.2中创建java web项目

    学习maven时参考的一些的博客地址:http://www.cnblogs.com/fnng/archive/2011/12/16/2290587.htmlhttp://sarin.iteye.com ...

  5. 事件委托 EventHandler

    事件就是当对象或类状态发生改变时,对象或类发出的信息或通知.发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时 ...

  6. iOS开发之瞬间位移动画效果

    步骤:1.使用single view application 创建一个新的项目 2.在.h文件中遵守<UIGestureRecognizerDelegate>协议,创建一个UIimagev ...

  7. ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法

    ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法 前几天卸掉了用了好多年的Windows,安装了Ubuntu12.04,就开始各种搭环境.今天装好了MySQ ...

  8. nginx源码学习资源(不断更新)

    nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...

  9. const char* <----- > string

    (1) const char*      <-----     string const char* const_txt_path=txt_path.c_str(); (2)  string  ...

  10. 前端学习资源(CSS+HTML5)

    CSS CSS | MDN CSS参考手册 CSS探索之旅 Web前端实验室 STYLESHEETS CSS3中的content字符编码 Font Awesome, 一套绝佳的图标字体库和CSS框架 ...