黑马程序员-抽象类总结

来源:互联网 发布:mac teamviewer 破解 编辑:程序博客网 时间:2024/05/18 13:27

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
 抽象类总结
 (1)抽象类的概述
  方法声明相同,功能实现不同.
 (2)抽象类
  Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,
  该方法称为抽象方法,包含抽象方法的类就是抽象类。

  特点:
   A:抽象类和抽象方法都必须用abstract标识
   B:抽象类中不一定有抽象方法
     抽象方法必须在抽象类中
   C:子类继承抽象类时:
    要么实现抽象类中的所有抽象方法.
    要么部分实现抽象类中的抽象方法,本身也必须定义为抽象类.
   D:抽象类不能被实例化
   E:用子类的对象来调用抽象类中的功能.真正调用的是子类中的实现.

 (3)抽象类中的成员
  A:成员变量
   既可以有变量,也可以有常量.
  B:成员方法
   既可以有抽象方法,也可以由非抽象方法.
  C:构造方法
   可以存在构造方法,但不能被实例化

 (4)抽象类的问题
  A:抽象类中是否有构造方法?抽象类不能不能被实例化呢?为什么?
   有.
   不能被实例化.
   因为抽象类中可能有抽象方法,被实例化后,调用抽象方法没有意义.因为抽象方法没有方法体.
  B:抽象类中可不可以没有抽象方法?
   可以.
  C:抽象关键字abstract不可以和哪些关键字共存?为什么?
   **private
    私有就不能被子类实现.
   **static
    静态的东西可以通过类名调用,而调用抽象的方法没有意义.
   **final
    final修饰的方法,不能被重写.而abstract要求被实现.冲突.
  D:继承中,为什么需要抽象类?
   因为抽象类可以强制要求子类实现某些功能.

接口
 (1)接口的概述
  当一个类的方法都是抽象方法的时候,可以用接口来表示.
 (2)接口的细节
  A:接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
  B:一个类可以在继承一个类的时候,实现多个接口.
  C:当一个类实现多个接口时,必须全部实现所以接口中的方法.
    假如你没有实现所有接口中的方法,那么这个类是抽象类.
  D:为什么不能有多继承呢?可能会出现调用方法不明确.
    而类实现多个接口时,由于接口中的方法都是抽象的,不会出现调用不明确的情况.
  E:java中有多继承吗?
    java中没有多继承,但是,它对多继承进行了优化.用多实现体现.
    java中有多继承.在接口上.
  F:类与类的关系:
   继承关系.而且只能是单继承.
    类与接口的关系:
   实现关系.可以单实现,也可以多实现.
    接口与接口的关系:
   继承关系.可以单继承,也可以多继承.
 (3)接口的特点
  interface关键字
  类与接口的关系用implements(实现)来表示
 
  A:对外暴露的规则
  B:是功能的扩展
  C:降低耦合性(Spring框架). 编程的要求:类与类之间低耦合.类本身高内聚.
  D:接口的出现让我们的类可以多实现.

  举例:CPU和主板,USB插口,电源插座

  接口的理解:
   A:狭义的理解指的就是java中的接口.
 
 (4)抽象类和接口的区别
  A:抽象类只能单继承
    接口可以多实现
  B:抽象类中的成员:
   成员变量:可以有常量,也可以有变量
   成员方法:可以有抽象的,也可以有非抽象的.
   构造方法:有构造方法,但是不能实例化.用于给子类进行实例化.
    接口中的成员:
   成员常量:接口中只能有常量
   成员方法:接口中的方法只能是抽象的.

   接口中的成员有默认修饰符:
   成员变量: public static final
   成员方法: public abstract
   但是,一般建议手动给出修饰符.
  C:抽象类中定义的是继承体系中的共享内容.
    接口中定义的是继承体系中的扩展功能.
  D:接口的出现避免了抽象类中单继承的局限性.
  E:抽象类表示的是"is a"的关系. xx是yy的一种.
    接口表示的是"like a"的关系. xx像yy的一种.

4:多态
 (1)多态的概述
  一个对象在程序的运行过程中,可能有多种形态.
  若Animal是父类,Dag是子类

  Animal a = new Cat();
  a.eat();

  a = new Dog();
  a.eat();

  生活中举例:
   男人(人,男人)
   狗(狗,犬科,动物)
   水(固态,液体,气态)
 (2)多态的举例
  Fu f = new Zi();
  f.show();

  f指向了子类的对象.
  但是调用的时候,确是调用父类中声明了的东西.
 (3)多态的成员特点

  Fu f = new Zi();

  成员变量:编译运行都看左边.
  成员方法:编译看左边,运行看右边.
  静态方法:编译运行都看左边.
 (4)多态的转型
  向上转型:从小到大 从子到父
  向下转型:从大到小 从父到子

  Animal a = new Dog(); //把狗提升为了动物
  a.eat();

  Dog d = (Dog)a; //把动物转成了狗
  a.play();


 
 (5)多态的思想 指挥同一类型的一批对象做事情.
  Animal:eat(),play()
  Dog:
  Cat:
  Pig:
 
  class Dog
  {
   void eat(){}

   void play(){}
  }

 

  public static void main(String[] args)
  {
   Dog d = new Dog();
   d.eat();
   d.play();

   printDog(d);
  }
 
  public static void printDog(Dog d)  //Dog d = new Dog();
  {
   d.eat();
   d.play();
  }

  public static void pritnAnimal(Animal a)
  {
   a.eat();
   a.play();
  }
 (6)关键字 instanceof 比较运算符
  A:判断某个对象是否是某种类型的
  B:格式
   对象名 instanceof 类名(子类的类名)
  C:举例
   public static void print(Animal a) //Animal a = new Cat();
   {
    //instanceof判断某个对象是否是某种类型的
    //格式:对象名 instanceof 类名(最好是子类的类名)
    if(a instanceof Dog)
    {
     Dog d = (Dog)a;
     d.play();
    }
    else if(a instanceof Pig)
    {
     Pig p = (Pig)a;
     p.play();
    }
    a.eat();
   }

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------

0 0