您的位置:首页 > 职场人生

黑马程序员-设计模式,继承和抽象类

2012-06-05 19:38 309 查看
---------------------- android培训java培训、期待与您交流! ----------------------
设计模式:就是解决某一类问题行之有效的思想。

单例设计模式:

 解决问题:保证一个类在内存中的对象唯一性。

 应用:可以实现数据共享。

 思路:

  1,不让其他应用程序建立该对象。

  2,本类建立一个本类对象。

  3,对外提供一个方法让其他应用程序获取该对象。

 代码体现:

  1,将构造函数私有化。

  2,创建本类对象,私有并静态。

  3,定义静态方法返回该对象。

//饿汉式。

class Single

{

 private static Single s = new Single();

 private Single(){}

 //为什么要定义该方法呢?是为了控制对s这个对象访问。

 public static Single getInstance()

 {

  return s;

 }

}

 

//懒汉式.对象的延迟加载。面试的常见考点。

class Single

{

 private static Single s = null;

 private Single(){}

 public static Single getInstance()

 {

  if(s==null)

   s = new Single();

  return s;

 }

}

---------------------------

继承:

 好处:

  1,提高了代码的复用性。

  2,让类与类之间产生了关系,这也是多态的前提。

 弊端:

  打破了封装性。

 继承在java中的特点:

  1,java只支持单继承,不支持多继承。

   其实不支持多继承的原因是:因为调用的不确定性。

   所以java改良了多继承,用另一种方式来体现,叫做 多实现。

  2,java支持多层继承。

   方便于大家使用一个继承体系的功能。

   1,查阅顶层类中的功能(共性功能)。

   2,建立子类对象完成功能的调用。

 什么时候定义继承呢?

  当类与类之间有所属(is a)关系时,就可以继承。

  A是B中的一种:A就可以继承B。

子父类的出现成员的特点:

1,成员变量:当子父类中出现了同名变量时,可以用super来表示父类中的变量。

 一般不常见,因为父类都定义完了,子类不需要在重新定义。

2,成员函数:当子类和父类出现一模一样的函数时, 这时会有一个函数的特性:覆盖override(复写,重写)

 覆盖的注意事项:

  1,子类覆盖父类的方法,必须权限要大于等于父类。

  2,静态只能覆盖静态。(最好不要出现静态覆盖)

3,构造函数(子类的实例化过程):

 子类的所有构造函数默认都会访问父类中空参数的构造函数。

 原因:因为子类的构造函数的第一行都默认有一个条件隐式的语句 super();

 为什么子类的构造函数非要访问父类的构造函数呢?

 因为子类会获取到父类的数据,所以要先看父类是如何对该数据进行初始化的。

 如果父类中没有空参数构造函数,那么子类构造函数需要通过super语句访问父类中指定的构造函数。

super和this的特点:

 两个关键字的用法很相像。

 但是有本质的区别:

  this:代表的是本类的对象。

  super:代表的是父类的存储空间,也就是给父类加上了一个标识。

 

------------------------

final:最终化。

 特点:

 1,final可以修饰类,函数,变量。

 2,final修饰的类不能被继承。

 3,final修饰的函数不能被覆盖。

 4,final修饰的变量是一个常量,只能赋值一次。(这里指的赋值是显示赋值).

  其实就是给一些固定的常量值起个容易阅读的名称。

  该名称的规范是所有字母大写。如果由多个单词组成,中间用_连接

class Single

{

 private static final Single s = new Single();

 private Single(){}

 public static Single getInstance()

 {

  return s;

 }

}

 

---------------------------------------------

抽象类

 由来:

  事物不断向上抽取而来,在抽取功能的过程中,只抽取了功能的定义,而没有抽取的功能的实现。

  这时该功能就是抽象的。抽象功能只能定义在抽象类中。

 特点:

  1,抽象类中可以存储抽象方法。

  2,抽象类不可以实例化,因为调用抽象方法没意义。

  3,抽象类必须由自己的子类覆盖了所有的抽象方法后,其子类才可以实例化。

 练习:

 猫:叫:喵喵。

 狗:叫:汪汪。

 两个事物都具备叫的功能。

 向上抽取去一个父类 动物。

 动物本身就是一个不具体的事物,动物都具备叫的功能,但是怎么叫不确定,也就是不具体。

 这时动物就是一个抽象事物,叫就是一个抽象的功能。

 abstract class Animal

 {

  abstract void jiao();

 }

 class Cat extends Animal

 {

  public void jiao()

  {

   System.out.println("喵喵");

  }

 }

 class Dog extends Animal

 {

  public void jiao()

  {

   System.out.println("汪汪");

  }

 }

 抽象类涉及的问题:

  1,抽象类是一个父类?

   是,必须由子类去覆盖抽象方法才可以实例化。

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

   有,虽然抽象类不可以实例化,但是其子类有可能实例化,抽象类中的构造函数是给子类进行初始化。

   

  3,抽象关键字不可以和哪些关键字共存?

   1,final 2,static,3,private.

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐