javaSE 第十天

Day10

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

今天内容:

   (1)抽象类

   (2)接口

   (3)内部类

1.抽象类(重点)

1.1 抽象方法

  抽象方法主要指不能具体实现的方法,该方法没有方法体,具体语法格式如下:

     访问控制符 abstract 返回值类型 方法名(形参列表);

  如:

     public abstract void cry(); 

1.2 抽象类

   抽象类主要指不能具体实例化的类,也就是不能构造对象,并且使用abstract关键字修饰。

1.3 注意事项

  (1)抽象类中可以有成员变量、成员方法以及构造方法。

  (2)抽象类中可以有抽象方法也可以没有。

  (3)拥有抽象方法的类必须是抽象类,因此很多资料上认为拥有抽象方法并且使用abstract

     关键字修饰的类才算真正意义上的抽象类。

1.4 实际意义

   抽象类的实际意义不在于创建对象而在于被继承,当一个类继承抽象类后必须重写抽象类中的抽象方法,否则该类也变成抽象类。

   因此抽象类对子类具有强制性和规范性,通常叫做"模板设计模式"。

经验分享:

   在以后的开发中推荐使用多态的语法格式,当父类有多个子类并希望更换子类时,只需要将new关键字后面的类型更换就能立刻生效,从而提高了代码的可维护性。

   此时方式的缺点在于:父类引用不能直接调用子类独有的方法,若调用则需要强制类型转换

2.接口(重点)

2.1 基本概念

   接口本质上就是一种比抽象类还抽象的类,该接口不能实例化对象。

   定义类的关键字是class,而定义接口的关键字是interface。

   继承类的关键字是extends,而实现接口的关键字是implements。

如:

   金属接口  货币接口   黄金类   

2.2 类和接口之间的关系

   类和类之间采用继承关系      使用extends关键字       支持单继承

   类和接口之间采用实现关系    使用implements关键字    支持多实现

   接口和接口之间采用继承关系  使用extends关键字       暂时认为单继承

2.3 抽象类和接口的主要区别(笔试题)

   (1)定义抽象类使用class关键字,定义接口使用interface关键字;

   (2)继承抽象类使用extends关键字,而实现接口使用implements关键字;

   (3)继承抽象类支持单继承,而实现接口支持多实现;

   (4)抽象类中可以有构造方法,而接口中没有构造方法;

   (5)抽象类中可以有成员变量,而接口只可以有常量;

   (6)抽象类中可以有成员方法,而接口只可以有抽象方法;

   (7)抽象类中增加方法可以不影响子类,而接口基本都会影响子类;

   (8)从jdk1.8开始允许接口中出现带有方法体的方法,但必须使用default关键字修饰;

3.内部类(了解)

3.1 基本概念

   当一个类存在的价值仅仅是为某一个类单独服务时,则可以将这个类的定义放在所服务类的内部,叫做内部类,而内部类所在的类叫做外部类。

   目前为止,类中可以出现的内容:

       成员变量、成员方法、构造方法、静态成员、构造块、静态代码块、内部类。

3.2 语法格式

   class 类名{

      class 内部类名{

         内部类的类体;

      }

   }

3.3 基本作用

   (1)内部类可以方便地访问所在类中的私有成员,而不再需要提供公有的get和set方法。

   (2)内部类放在类中只被所在类使用,对其它类实现隐藏效果。      

3.4 基本分类

   普通内部类 - 直接将一个类的定义放在另外一个类的内部。

   静态内部类 - 使用static关键字修饰的内部类。

              - 只有内部类才可以使用static关键字修饰,普通类不能修饰。

   局部内部类 - 直接将一个类的定义放在一个方法体的内部。

              - 局部内部类的作用域为声明开始到方法体结束。

   匿名内部类 - 主要指没有名字的内部类。

3.5 匿名内部类(重点、难点)

(1)语法格式

   父类/接口类型 引用变量名 = new 父类/接口类型(){ 方法的重写 };

(2)经验的分享

   当接口类型的引用作为方法的形参时,实参的传递方式有2种:

       a.自定义类实现接口,然后创建该类的对象作为实参传递;

       b.直接采用匿名内部类的语法格式来创建对象作为实参传递;

作业:

   1.复习和总结面向对象的所有内容。

   2.理解和编写五子棋游戏。

   3.尝试编写扫雷游戏。    

猜你喜欢

转载自blog.csdn.net/zgzdcxy/article/details/82737120