学习Java的第八天

学习Java的第八天

抽象类和抽象方法

  • 用abstract关键字来修饰一个类,这个类叫做抽象类。
  • 用abstract来修饰一个方法,该方法叫做抽象方法。
  • 抽象方法:只有方法的声明,没有方法的实现。以分号结束: 比如:public abstract void talk();
  • 含有抽象方法的类必须被声明为抽象类。
  • 抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重 写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍 为抽象类。
  • 不能用abstract修饰变量、代码块、构造器;
  • 不能用abstract修饰私有方法、静态方法、final的方法、final的类。

匿名类

  • 格式:
  • 抽象类创建实例在最右侧加上大括号
  • 并且对抽象方法进行重写

模板方法设计模式

  • 在软件开发中实现一个算法时,整体步骤很固定、通用, 这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽 象出来,供不同子类实现。这就是一种模板模式

接口

why:

  • 一方面,有时必须从几个类中派生出一个子类,继承它们所有的属性和方 法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。
  • 另一方面,有时必须从几个类中抽取出一些共同的行为特征,而它们之间又 没有is-a的关系,仅仅是具有相同的行为特征而已。例如:鼠标、键盘、打 印机、扫描仪、摄像头、充电器、MP3机、手机、数码相机、移动硬盘等都 支持USB连接。

What:

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则 必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能" 的关系。
  • 接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都 要遵守。

接口的特点:

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要...则 必须能...”的思想。继承是一个"是不是"的关系,而接口实现则是 "能不能" 的关系。
  • 接口的本质是契约,标准,规范,就像我们的法律一样。制定好后大家都 要遵守。

接口的注意事项;

  • 定义Java类的语法格式:先写extends,后写implements

    class SubClass extends SuperClass implements InterfaceA{ }

  • 一个类可以实现多个接口,接口也可以继承其它接口。

  • 实现接口的类中必须提供接口中所有方法的具体实现内容,方可实 例化。否则,仍为抽象类。

  • 接口的主要用途就是被实现类实现。(面向接口编程)

  • 与继承关系类似,接口与实现类之间存在多态性

  • 接口和类是并列关系,或者可以理解为一种特殊的类。从本质上讲, 接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义 (JDK7.0及之前),而没有变量和方法的实现。

自己对于接口的总结

    接口 里面 定义了抽象方法 也就是一些功能 但是这些功能 在不同的实现类当中 实现这个功能的步骤 方法也是不一样的
    相似的 在usb 这个接口当中 有传输数据的这个功能 但是在 电脑 和 手机 上用usb 传输数据的 具体方法是不一样的 所以就要加载不同的驱动程序

jdk8.0之后的新特性

  • 可以定义静态方法和默认方法

  • 接口中的静态方法只能通过接口来调用

  • 接口中的默认方法可以创建接口实现类的实例来调用

  • 两个接口中定义了同名同参数的默认方法 可以通过实现类的重写来解决接口的冲突 并且调用的是重写的默认方法

  • 如果是接口和父类定义了同名同参数的默认方法就遵循父类的优先原则

  • 在实现类当中调用接口的默认方法

     A.super.method();

代理模式proxy

  • 代理模式是Java开发中使用较多的一种设计模式。
  • 代理设计就是为其 他对象提供一种代理以控制对这个对象的访问

工厂模式factory

  • 将对象的创建和调用分离

接口和抽象类之间的对比

  • 相同点:不能实例化 都可以被继承
  • 不同点:
  • 抽象类:有构造器
  • 接口:不能声明构造器
  • 多继承和单继承

内部类

  • 内部类分为成员内部类(静态 和 非静态) vs 局部 内部类(代码块 方法内 构造器内)

  • 成员内部类:

    • 可以定义 属性 方法 构造器
    • 可以被final修饰
    • 可以被abstract修饰
    • 可以调用外部类的成员
    • 可以被static 修饰
    • 可以被不同的修饰符修饰
  • 关注如下的三个问题

    • 如何实例化成员内部类的对象

      Peson.Dog dog = new Person.Dog
          //静态成员内部类的声明对象
      Person p = new Person();
      Person.Organ o1 = p.new Organ();
      //动态成员内部类对象的创建
    • 如何在成员内部类区分调用外部类的结构

    • 开发中局部内部类的使用

      public class ClassA {
          // 开发中常用 返回一个实现了Comparable接口实现类的对象
          public Comparable getcomparable(){
              class MyComparable implements Comparable{
      
                  @Override
                  public int compareTo(Object o) {
                      return 0;
                  }
              }
              return new MyComparable();
          }
      }

猜你喜欢

转载自www.cnblogs.com/wumingzhibei/p/12545377.html