码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象基础总结

时间:2019-03-31 14:08:19      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:声明   相同   一致性   优先   protect   强一致   存储空间   特征   抽象   

1.对象和类

  1.1 对象和类的关系:对象是类的实例,类是对象的模板。

  1.2 对象:拥有属性和方法

    属性:静态特征,数据,变量

    方法:动态特征,行为,功能

    属性是数据,方法就是对数据的操作

  1.3 面向对象:
    对象:显示世界中的所有实体都是对象

     类 : 对具有共同属性和行为的对象进行抽象,得到的一个抽象的概念

    在面向对象编程时要追求低内聚,高耦合(模块越独立越好,模块间的关系越松散越好)

    面向对象编程的特点和好处:面向对象更方便代码的修改,维护,扩展;数据和功能是一个整体

2.封装

  2.1 什么是封装:
    将类的某些信息隐藏在类内部,不允许外部程序直接访问,通过调用方法来实现对隐藏信息的操作和访向。

    隐藏对象的属性和实现细节,仅对外提供公共访问方式。

  2.2.封装的好处:

    将变化隔离;便于使用;提高重用性;安全性。

  2.3 封装的格式:   

    1、使用访问修饰符修饰成员变量和成员方法
    2、对外提供getter和setter方法

3.继承
   3.1 什么是继承:

      继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

   3.2 继承的好处:     

      1、继承关系是传递的。可以在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。  

      2、继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

      3、继承能减小代码和数据的冗余度,大大增加程序的重用性。

      4、继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

      5、Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。

    3.3 继承的格式:

      子类名 extends 父类名{ }

    3.4 继承关系下代码的执行顺序 

      父类的静态代码块
      子类的静态代码块
      父类的构造代码块
      父类的无参构造方法
      子类的构造代码块
      子类的无参构造方法
      =============================
      父类的构造代码块
      父类的无参构造方法
      子类的构造代码块
      子类的有参构造方法
       总结:1、优先调用父类
          2、静态代码优先加载,且只加载一次(作用:第一个对象创建时,执行一些操作(记录日志:))
          3、构造代码块每次调用构造方法时都会调用(作用:每一个该类创建时可以记录日志)
          4、子类的构造方法不管有参无参都会先去调用父类的无参构造

 1 //测试类
 2 public class TestDemo{
 3     public static void main(String[] args) {
 4         Son son =new Son();
 5         System.out.println("=============================");
 6         Son son2 =new Son("name");
 7     }
 8 }
 9 //父类
10 class Father {
11     static {
12         System.out.println("父类的静态代码块");
13     }
14     {
15         System.out.println("父类的构造代码块");
16     }
17     public Father() {
18         System.out.println("父类的无参构造方法");
19     }
20     public  Father(String name) {
21         System.out.println("父类的有参构造方法");
22     }
23 
24 }
25 //子类
26 class Son extends  Father {
27     static {
28         System.out.println("子类的静态代码块");
29     }
30     {
31         System.out.println("子类的构造代码块");
32     }
33     public Son() {
34         System.out.println("子类的无参构造方法");
35     }
36     public Son(String name) {
37         System.out.println("子类的有参构造方法");
38     }
39     
40 }
41 //执行结果:
42 /*父类的静态代码块
43 子类的静态代码块
44 父类的构造代码块
45 父类的无参构造方法
46 子类的构造代码块
47 子类的无参构造方法
48 =============================
49 父类的构造代码块
50 父类的无参构造方法
51 子类的构造代码块
52 子类的有参构造方法
53 */

 

4.构造方法

  4.1 定义和作用
    在Java中,任何变量在被使用前都必须先设置初值。Java提供的为类的成员变量赋初值的专门方法。(初始化变量

  4.2  常识:子类的所有构造方法都会去访问一次父类的无参构造方法

    问题:为什么子类要去访问父类的构造方法?

    解析:因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。

    问题:如果父类中没有无参的构造方法该怎么办?

    分析:父类中没有无参构造,那么子类在初始化的时候就会报错。

       解决办法:1、在父类中加一个无参构造方法

          2、通过使用super关键字去显示的调用父类的带参构造方法

          3、子类通过this去调用本类的其它构造方法(比如用子类的有参去调用自己的无参构造方法,但无参构造里一定要有super())

5.访问修饰符

  5.1 访问修饰符使用范围

    用来修饰成员变量和成员方法,不能用来修饰局部变量

  5.2 访问修饰符权限

            同类   同包    子类    其他包

    private          V  X   X  X

    默认     V   V           X       X

    protected   V        V           V       X

    public      V        V           V       V   

6.四个关键字   

  6.1 static(静态的)

    使用范围:用来修饰成员变量、成员方法和代码块

    作用 :

      1.想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。

      2.被静态修饰的成员,可以直接被类名所调用。

      3.静态随着类的加载而加载。而且优先于对象存在。

    命名方式:

      属性(成员变量):
          有static修饰:静态成员(静态变量)

         没有static修饰:实例成员(非静态变量)(非静态成员)

      方法(成员方法):          

          有static修饰:静态方法(静态方法)

         没有static修饰:实例方法(非静态方法)(非静态方法)

      代码块({ })  :

          有static修饰:静态代码块

         没有static修饰:非静态代码块(构造代码块)

     总结 :

      a.不管是静态方法还是非静态方法,都需要调用后执行,其执行的次序和在类里声明的次序无关,区别是静态方法是“class.method"方式执行,非静态方法是"object.method"方式执行,即后者需要创建一个对象。
      b.静态成员变量(也称类变量)先于非静态成员变量初始化,静态成员变量在类第一次加载时初始化,所有对象共享一份静态成员变量,非静态成员变量则在对象创建时初始化  

  

  6.2  final(最终的)

    使用范围:修饰类、修饰方法、修饰变量

    作用:1、修饰的类不可被继承

       2、修饰的方法不能被重写

       3、修饰的变量的值不能更改(即为常量,通常变量名全大写)

    作用(详细):

       1、被final修饰的类不能被继承

       2、被final修饰的成员变量

          a. 必须初始化值。

          b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。

          c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

          d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

       3、被final修饰的方法不能被重写

          a. 一个类的private方法会隐式的被指定为final方法。

          b. 如果父类中有final修饰的方法,那么子类不能去重写。

  6.3  this和super

       两者定义的区别:

          this代表本类的引用

          super代表父类存储空间的标识(可以理解为父类的引用,可以操作父类的成员)

       两者使用的区别:

          调用成员变量:

            this.成员变量     调用本类的成员变量

            super.成员变量 调用父类的成员变量

          调用构造方法:

            this(...)  调用本类的构造方法
            super(...)    调用父类的构造方法

          调用成员方法:

            this.成员方法     调用本类的成员方法

            super.成员方法  调用父类的成员方法

7.方法的相互调用

  7.1 同类 :

     静态调用静态

        a.直接调

        b.类名.方法名

        c.对象名.方法名(不建议使用,因为这样不能分辨是静态调静态还是静态调非静态)

     静态调用非静态

        创建调用类的对象,再对象名.方法名

     非静态调用静态

        a.直接调用

        b.类名.方法名

        c.对象名.方法名(不建议使用)

     非静态调用非静态

        a.直接调用

        b.对象名.方法名

  7.2 不同类

     静态调用静态

        类名.方法名

     静态调用非静态

        创建调用类的对象,再对象名.方法名

     非静态调用静态

        类名.方法名

     非静态调用非静态

        对象名.方法名

8.方法的重载

  同一个类中,方法名相同,参数的数量,类型,顺序不同即为重载(只与参数有关)

9.方法的重写

  发生在继承关系下,子类对父类允许访问的方法的实现过程进行重新编写, 方法声明相同(即返回值和形参都不能改变。即外壳不变,核心重写)

 

 

    

    

    

 

 

 

 

 

    

面向对象基础总结

标签:声明   相同   一致性   优先   protect   强一致   存储空间   特征   抽象   

原文地址:https://www.cnblogs.com/19322li/p/10630859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!