面向对象~

一、面向过程和面向对象

  面向过程(POP)是把问题分解成一个接一个步骤,然后把具体步骤一一实现,代表有C语言

  面向对象(OOP)是先把问题分类,再对每个类进行详细设计分析每个类具有的属性和行为,代表有JAVA,C++

  比如洗衣服,用面向过程的思想就会把它拆分为:打开洗衣机->放入衣服->倒洗衣液->启动洗衣机;而面向对象会把它拆分为人和洗衣机两个对象:人有打开洗衣机,把衣服放进洗衣机和倒入洗衣液三个行为也叫方法,洗衣机有启动和停止工作两个行为。

  相比于面向过程,面向对象更易于复用,扩展和维护

  总而言之,面向对象是从宏观上对事物进行设计,详细设计还是基于面向过程的,面向对象和面向过程是相辅相成的。

二、JAVA中的类

  类是对一类具有共同特征的事物的抽象

  定义:[访问修饰符] [修饰符] class 类名 {

          成员变量

          成员方法

          构造方法

          内部类

          代码块

}

  关键字class 用来定义类

  类的访问修饰符有private,protected,default,public

  private,protected处可以修饰类,还可以修饰属性和方法

                                private           protected       default          public

     同类                       ---

     同包                       ---                   ---

     不同包的子类        ---                   ---                  ---

     不同包的不同类    ---                   ---                  ---                   ---

  public修饰类时,类名需与文件名一致,且一个java文件只能由一个public类

  类的修饰符有abstract,static,final

     static:表示静态,被其修饰的变量和方法可以直接通过类名调用

     abstract:修饰类时类为抽象类,修饰方法为抽象方法

                    抽象类和普通类的区别就是抽象类不能实例化对象,、

                    抽象方法只有声明,没有方法体

                    当类中有抽象方法时也必须定义为抽象类

                    继承抽象类的非抽象类必须实现父类的所有抽象方法,否则也需定义成抽象类

     final关键字:修饰类时类不能有子类,也不能被定义为抽象类或接口

                          修饰方法时不能被重写

                          修饰变量时初始化后值不能再改变。赋值分为两种情况:1是声明时同时初始化,                                通常和static一起使用,2是在构造方法中对其初始化

   类的构造方法即对对象进行初始化

  类的成员变量作用范围为整个类体,如果未对其初始化,JAVA 会自动为其初始化

三、JAVA中的对象

  对象是类的实例

  声明:类名 对象名 = new 类名(); 等号左边声明了一个对象,是引用类型变量,指向等号右边在内存空间中为对象开辟的一块地址

  对象1=对象2:对象本身并没有被复制,复制的是对象引用,即两个对象指向同一个地址

四、类和对象

  同一类的每个对象有自己不同的成员变量存储空间,共享类中定义的成员方法

  对象是类的实例,类是对象的抽象

  声明对象也叫实例化对象

五、变量分类和方法分类

  变量分为成员变量和局部变量

  成员变量:定义在类中,方法体外,可以不进行初始化,JAVA 会自动对其初始化,默认值为各数据类型的默认值

  局部变量:定义在方法体内,必须在声明的同时进行初始化

  方法的形参也属于局部变量

  方法有成员方法和构造方法

  成员方法定义在类中。

  定义:

    修饰符 返回值类型 方法名( 参数列表) {

    方法体语句;

    [return 返回值]

}

六、构造方法

  构造方法用于初始化对象,名称与类名相同,无返回值也无需void修饰,默认是无参的,在new对象时自动生成;

  一个类可以有多个构造方法,有参的和无参的;

  一旦显式定义了一个有参的构造方法,默认的无参构造方法即失效。

七、方法的重载

  方法的重载是指方法名称相同,参数不同(参数个数,类型,顺序),与返回值无关

调用时,会根据不同的参数表选择对应的方法

八、值传递和引用传递

  值传递:指在调用函数中,将实际参数复制一份传递到函数中,后续如果在函数中对参数进行修改,是不会影响到实际参数的。形参数据类型是基本数据类型

  eg:public class TestValue {

public  void test(int x){
       x = 20;//变量x值发生变化,与a没有任何关系的
}
​
public static void main(String[] args) {
        TestValue t =  new TestValue();
        int a = 10;
        t.test(a);//传递的是基本类型,可是用a的值实际填充了x, 是两个不相干的变量
    System.out.println(a);//?
}

}

  引用传递:指在调用函数中,将实际参数的地址传递到函数中,后续如果在函数中对参数进行修改,将会影响到实际参数。(String 类型除外)形参数据类型是引用数据类型

  eg:public class TestRef {

public  void test(Person p){//p  = p1 = 1001 指向的是同一个对象
       p.name = "李四";
}
​
public static void main(String[] args) {
    TestRef t =  new TestRef();
    Person p1  = new Person(); //p1=1001
           p1.name = "张三";
           p1.age = 20;
           t.test(p1);//对于引用类型,只是将对象的引用地址值传递
    System.out.println(p1.name);//
}

}

  基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象

本身 。

九、this关键字和static关键字

  this 关键字代表当前对象,一般使用在类的有参构造方法中,用来区分成员变量和局部变量

  eg:public class Main{

        private int a;

       }

     public Main(int m){

        this.a=m;

       }

  static是静态的意思,通常用来修饰类的属性,方法,代码块以及内部类

    随着类的加载而加载

    优先于对象存在

    修饰的成员被所有对象共享

    可不创建对象,直接被类调用

  被static修饰的方法叫做静态方法,否则就是非静态方法

  在修饰方法的时候,静态方法里不能访问类的非静态的属性,非静态方法可以访问静态属性

  代码块在类中声明,分为实例代码块和静态代码块,是用{}括起来的方法体

  实例代码块:每次创建对象时自动调用

                       {

                            代码

                        }

静态代码块:类加载时调用且只调用一次,调用后永远存在

                      static {

                                代码

                               }

  执行顺序:静态代码块,实例代码块,构造方法

十、包

  为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间

  导入外部包的类需要使用import关键字,需要写全类名,java.lang下的包不需要导入,可直接使用

十一、面向对象三大特征

  面向对象三大特征为封装,继承,多态

  封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

            通常体现在设置不同的访问权限和私有属性的get()和set()方法​​​​​​

            封装并不只是通过private来实现

  继承:即子类继承父类(也叫基类),使用extends关键字,继承之后子类可以调用父类的所有非私               有属性和方法

            Object类是所有类的父类,当一个类没有为它指定父类时,Object就是它的父类

           java不允许多继承,一个类只能有一个直接父类

           子类继承父类时,子类构造方法会先调用父类构造方法,使用super关键字来调用且必须卸载子类构造方法的第一行,若无显示调用,则系统会默认调用父类的无参构造方法

         super关键字:用来访问父类成员,它并不是父类对象,而是把父类中的信息加载到子类中存储

                  eg:super.成员变量;super.构造方法;super.普通方法

         方法的重写(Override):当父类方法不能满足子类需求时就需要重写父类方法,使用@Override注解标签可以强制检查语法

           规则:方法名相同、参数列表相同,返回值类型相同,访问权限不能小于父类权限

                      其中,构造方法、静态方法不能重写,成员变量也不存在重写

  多态:指同一事物在不同时刻表现不同的形态  父类 对象名=new 子类();

            使用条件:继承,重写,父类引用指向子类对象(即编译类型是父类,运行类型是子类)

             多态环境下对成员方法的调用:编译看左边,运行看右边

             多态环境下对静态成员方法和成员变量的调用:编译和运行都看左边

             优点:子类默认向上转为父类类型,提高了程序的扩展性

             缺点:不能访问子类中特有的方法

                         解决:向下转型

十二、接口

  接口是一种特殊的抽象类;类与接口之间存在实现关系,用implements关键字实现,同时要实现接口的所有抽象方法,否则需定义为抽象类;一个类可以实现多个接口;接口与实现类间存在多态性;接口之间可以有继承关系

 jdk8以前,接口中只能定义抽象方法和静态常量

 jdk8以后,还可以定义默认方法和静态方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值