关于继承、封装、多态、抽象和接口

时间:2022-12-26 21:54:25

1.继承:

       通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。已有的称为父类,新的类称为子类(父类派生子类,子类继承父类)。

   (1)继承的优点:①代码的可重用性;

           ②父类的属性的方法可用于子类;

           ③子类可扩展父类的属性和方法;

           ④设计应用程序变得更加简单。

   (2)关键字“is a”用于判断父类和子类的继承关系是否正确。

   (3)Java中继承的实现:

                                  public  class  子类 extends  父类{}

   (4)继承的单根性:在Java中一个类只能有一个父类;

        传递性:一个Java类可以父类,父类也可以有父类。

   (5)所有类的根类:Object类,又叫基类或超类。Object类是每个Java类的父类,要么是直接的父类,要么就是间接的父类。

            Object类中的三个重要方法:

                ①public  boolean  equals(Object x):检测两个对象是否相等。该方法经常被重写。若两个对象通过该方法判断是相等的,那么两个对象的                                                                                                      hashCode()方法应该产生相同的哈希码

                ②public  String  toString:该方法返回对象的字符串表示。用字符串来表示对象有助于调试或测试。

                ③protected  void  finalize()  throws  Throwale:该方法在对象将要被垃圾回收时调用。

    (6)方法重写:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。该行为方法生在子类中,对父类方法重写。

                           子类重写父类方法时,必须遵循如下规则:

              ①子类的方法的返回值类型方法名形式参数列表必须和父类中的是相同的;

              ②访问修饰符必须不小于父类中的访问修饰符;

              ③子类中重写抛出的异常不能比父类中抛出的异常多。

      (7)super 关键字:子类想要给继承的方法添加行为,但并不完全替换父类的方法。(默认情况下,子类构造器会调用父类的无参构造方法)

         (8)final 关键字:当不希望一个类被继承是则在class前加上关键字final。final关键字可以出现在返回值类型之前的任意位置,习惯上是放在访问修饰符之后。

          ①final类:一个类可以声明为最终类的 。 最终类不能被继承。

          ②final方法:一个方法可以声明为最终的 。 最终方法不能被重写。

                 补充:父类的构造方法不能被继承,可用super( , , )来调用构造器,用super调用父类方法。

    (9)abstract关键字:使用关键字abstract可以声明一个抽象类,该关键字可以出现在类声明时class关键字前的任何地方。当类没有实例化必要时,可将该类改为抽象类。

         (10)抽象方法:①没有方法主体;②必须出现在抽象类中;③在子类中必须被重写,除非子类也是抽象类。                              

2.封装:

    (1)封装是使类中的成员变量都是private,并提供public方法访问这些成员变量的技术,封装也被称为数据隐藏。作用:保证数据的安全性。

         (2)访问器方法:允许获取成员变量的get方法;

     修改器方法:允许改变成员变量的方法。

     (3)封装的好处:①类的成员变量可以成为只读或是只写的;

            ②类可以对储存在其成员变量中的内容有一个整体的控制;

            ③类的用户不需要知道类是如何存储数据。

    eg:

1 public class Students{
2     private String name;
3     public void setName(String name){
4        this.name = name; 
5    }
6    public String getName(){
7        return name;
8    } 
9 }

3.多态( polymorphism ):

    (1)是指一个对象有多种形式的能力,一个类的子类可以定义他们唯一的行为,同时共享父类的某些相同的特征。

       静态多态:①在程序编译时发生;

           ②实现方式: 方法重载;

           ③规则:依据对象在定义时的类型相应的调用对应类中的重载方法;

      动态多态:①在运行时发生;

            ②实现方式: 重写父类的同名成员的方法

            ③调用规则:依据对象在实例化时的类型,相应的调用对应类中的同名成员的方法。

    (2)多态的技术基础:①向上转型技术:一个父类的引用变量可以指向不的子类对象;

              ②instanceof关键字:用于判断运行时对象的真正类型(Java语言的多态机制导致了引用变量的声明类型和实际引用对象的类型可能不一致,因此                           引用instanceof运算符);

              ③动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法。

              向上转型:由低精度类型转为高精度类型实行自动转换;

              向下转型:由高精度类型转为低精度类型需使用强制类型转换符。

4.接口—特殊的抽象类(interface):

    (1) ①接口中全都是抽象方法,不能被实例化;

      ②类不能继承接口,只能“实现”接口所定义的方法;

    (2)接口与类

        相似之处:

            ①接口可以有任意数量的方法;

            ②接口保存以“ .Java ”为后缀名的文件,接口名需要与文件名匹配;

            ③接口编译后是后缀名为“ .class ”的字节码文件;

            ④在包中的接口,其相应的字节码文件必须放置在和包名称相匹配的一个目录结构中。

        不同之处:

            ①接口不能被实例化;

            ②接口不包含任何构造器;

            ③接口中所有的方法都是抽象的;

            ④接口中不能包含实例成员变量,唯一可以出现在接口中的成员变量必须是同时声明为static和final,即公有静态常量;

            ⑤接口不能被一个类继承,只能被一个类实现;

            ⑥一个接口能够继承多个接口。

    (3)接口具有以下性质:

            ①接口默认是抽象的;

            ②接口的中每一个方法默认也是抽象的;

            ③接口中的方法默认访问级为public。

    (4)接口使用原则:

            ①使用接口解决多继承;

            ②使用接口为外部类添加功能;

            ③以面向对象的角度考虑,量一个类与生俱来的特征和行为和依赖于外部的可选特征和行为分离。

    (5)类实现接口有2个选择:

            ①实现接口中所定义的所有方法;

            ②声明自己为抽象类。

     使用关键字implements类实现接口,该关键字放在类声明的extends部分之后

     eg:

      public class 类名 extends 父类名 implements 接口名
     一个类可以实现多个接口,接口之间用逗号分隔。

     implements 与 is a 都是继承关系。

    (5)使用接口的好处:

          ①将设计和实现分离,对外隐藏了实现;

          ②面向接口编程是OOP的核心。