面向对象技术

来源:互联网 发布:windows nt 4.0 sp6 编辑:程序博客网 时间:2024/06/06 12:41

1、面向对象的特征:

      抽象:过程抽象,数据抽象

      继承:子类包含父类的方法和实例变量。

      封装:(类),类将自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

      多态:允许不同类的对象对同一消息作出响应,多态包括参数化多态包含多态

2、继承:

      a、子类只能继承父类的非私有(public与protected)成员

      b、当子类的成员变量与父类的成员变量同名时,子类成员变量覆盖父类成员变量,而不会继承。(方法也是这样)

3、继承与组合

      a、除非两个类是“is-a”(继承)的关系,否则,不要轻易使用继承,不要单纯的为了代码的重用而使用继承。

            因为:当父类被修改时,会影响到所有继承它的子类。  

      b、不要为了实现多台而使用继承,可以通过接口与组合的方式来达到相同的目的。采用接口与组合的方式比采用继承的方式具有更好的可扩展性。

             class A{}

             class B{

                   A a=new B();    //先实例化子类的对象,然后再转换为父类的对象。先调用父类的构造函数,然后再调用子类的构造函数。

                                              //当子类重写父类的方法时,调用子类的方法;当子类没有重写父类的方法,将调用父类的方法;调用子类特有方法时,编译错误。

             }

4、多态

      a、编译时多态:(方法的重载)方法同名,参数不同;编译时确定调用哪个方法。

      b、运行时多态:(方法的覆盖)子类覆盖父类的方法,同样的方法在父类和子类中有着不同的表现形式。

5、重载和覆盖的区别

      重载:1、重载是通过不同的方法参数来区分的;不能通过方法的访问权限,返回值类型,抛出的异常类型来进行重载;

                  如果父类方法为private,无法对其进行重载;子类若定义了一个同名的函数,相当于新定义了一个方法。

      覆盖:a、子类和父类具有相同的函数名和参数;返回值、异常也必须相同;被覆盖的方法不能为private,否则重新定义了一个新的函数。

      覆盖和重载的区别:

           a、父子类的关系:覆盖为垂直关系,重载为水平关系(同一个类中方法之间的关系)

           b、覆盖只能由一个方法或只能由一对方法产生关系;重载是多个方法产生关系。

           c、覆盖要求参数相同,重载要求参数不同

           d、覆盖关系中:调用方法体是根据对象的类型(对象对应的存储空间类型);重载关系根据实参表与形参表来选择方法体。

6、抽象类和接口 

      抽象类:a、只要包含抽象方法就是抽象类。抽象方法的实现必须用相同或者更低的访问级别;

                      b、抽象类的使用的过程中,不能被实例化;但是可以创建一个对象指向具体子类的一个实例。

                      c、抽象类的子类须实现父类所有抽象方法,否则,子类也是抽象类。

                      d、abstract只能用来修饰类与方法,不能用来修饰属性。

7、接口:a、可以通过接口间接实现多重继承

                   b、接口中的成员变量都是static final类型

8、接口与抽象类的相同点如下:

                   a、:都不能被实例化

                   b、: 二者的子类只有把抽象方法都实现后,才能被实例化。

      接口与抽象类的不同点如下:

             a、接口只有定义,没有实现;抽象类可以有定义与实现

             b、接口:"has-a"关系,抽象类强调从属关系“is-a”。

             c、接口需要实现(implements),但抽象类只能被继承(extends);一个类可以实现多个接口,但一个类只能继承一个抽象类,使用接口可以达到间接继承的目的。

            d、接口中的变量默认:public static final,只能够有静态的不能被修改的数据成员,必须赋初值; 所有中的成员方法只能是:public 、abstract这两个关键词修饰。

                  抽象类中的成员变量:默认default,也可以被定义为任意类型。

                                      抽象方法:必须有abstract修饰,不能用private、static、synchronized、native修饰,方法以分号结尾。

                  所以,功能累积:抽象类;不需要累积:接口。

9、非静态内部类不能定义静态成员;静态内部类不能访问外部类的非静态成员。

10、this.getClass().getName();  获取当前类;

        super.getclass().getName();仍返回的当前类;因为Object类的getClass( )方法被定义为final与native,子类不能覆盖该方法;

                                                           因此,this.Class()和super.Class( )最终调用的都是Object中的getClass()方法。而该方法返回的是运行时类,所以返回了仍是子类

        子类中得到父类:this.getClass( ).getSuperclass( ).getName( );

11、this和super的区别:

        this:指向当前实例对象,即通过this访问该类的成员变量。

        super:当子类和父类有相同的名字时,子类覆盖了父类的方法和成员变量,用super访问父类的方法和成员变量。

     

      

原创粉丝点击