华清远见学习总结

编程思想
面向过程编程

Procedure Oriented Programming 简称POP。

是一种基本的编程思想,将一件事情按流程按步骤执行,逻辑清晰。

每一步都是基于上一步的流程去继续实现。

注重于分析问题的步骤。

如果逻辑复杂,如xxx管理系统,使用POP就会变得很麻烦。

C语言就是一门面向过程的编程语言。

面向对象编程

Object Oriented Programming 简称OOP。

是一种编程思想,核心是创建解决问题的对象,赋予对象行为和特征,让这些对象互相配合执行。

每个对象的行为实际也是面向过程的。

注重于全局如何创建完成某件事情的对象,如果适时地调用。

这种思想致力于将计算机中的世界,描述的和现实中一致的思想。

总结

面向过程:亲力亲为,侧重于分析完成事情的过程

面向对象:所有事情交给相应的对象完成,侧重于如何创建解决问题的对象

类和对象
类Class

具有相同属性和行为的对象的集合。相当于模板。

属性

描述这个类的特征值,在程序中,通过定义变量实现。

行为

描述这个类的动作,在程序中,通过定义方法实现。

创建一个class文件,就是创建一个类。

定义类

[修饰符] class 类名{

属性(定义变量)

行为(定义方法)

}

对象Object

对象由某个类创建出来的具体实例。

创建对象

类名 对象名 = new 构造方法([参数]);

创建出的对象,通过"."操作符访问类中的非私有属性和方法。

成员变量和局部变量

成员变量

定义在类中的变量,称为成员变量,有默认值

局部变量

定义在方法中的变量,称为局部变量。没有默认值,赋值后才能使用。

构造方法

概念

构造方法也称为构造函数、构造器、constructor

它是一个特殊的方法。

没有返回值部分,方法名和类名一致,在创建对象时通过new调用,给类的成员变量赋值。

特点

创建对象时必须通过new配合构造方法

构造方法没有返回值部分,名称和类名相同

构造方法可以存在多个,但是参数不能相同。这些构造方法之间的关系称为方法重载

每个类默认有一个隐藏的无参数的构造方法,方法体中隐含了一句super()。用于创建无参数的对象

如果自己写了带参数的构造方法,默认无参数的构造方法就会失效。如果想要同时拥有带参数和不

带参数的构造方法,

就需要再次显式地写出来

带参数的构造方法常用于初始化成员变量(给类中的变量赋值)

构造方法可以限制创建对象时携带的参数

构造方法无法通过"."操作符访问,只能通过new关键字创建对象时调用

封装

使用private关键字对成员变量进行修饰。再提供一组get和set的方法,用于对该属性读取和赋值。

可以防止除自身类之外的地方对private修饰的属性进行访问。

这样就能保护关键属性或给属性赋一个合理的值。

面向对象三大特性--继承

概念

类B使用extends(延伸)关键字"继承"类A。

语法:class 类B extends 类A{}

类B称为类A的子类,衍生类,subClass

类A称为类B的父类,超类、supClass

继承后,子类就能访问父类中的非私有(没有使用private修饰)成员变量和成员方法。

将多个类中的公共代码提取出来保存到一个公共类中,这些类使用extends"继承"这一个公共类,从而减

少这些类中的冗余代码。

特点

如果多个类之中有相同的代码,可以将这些代码提取出来到一个公共的类中,这个类就是父类。再

让那些类去extends继承这个父类,那些类就是子类。子类就无需再写重复代码

子类中或子类对象可以直接访问父类中非私有(不用private修饰)属性和方法

创建子类对象时,会先执行父类中相应的构造方法

子类继承父类后,通常会对对父类中的方法进行拓展或覆盖,这称为方法重写。重写后,子类再调

用该方法时,执行的是重写后的内容

Java中是单继承。一个子类只能extends一个父类,一个父类可以有很多子类

Java中可以多重继承,类A可以继承类B,类B继承类C,这是类A既是类B的子类,也是类C的子

类,类A可以访问类B和类C中的非私有成员任何类都是Object

方法重写和方法重载

方法重写override

当子类继承父类后,可以对父类中的方法进行扩展或覆盖。这个过程称为方法重写。

方法重写要求

方法名、返回值、参数列表必须和父类一致

访问权限不能比父类更严格(访问修饰符的范围要么一致要么更大)

不能抛出比父类更大的异常

IDEA中如果要重写方法,使用CTRL + O在弹出的窗口中选择要重写的方法

方法重载overload

在一个类中,如果多个方法的方法名相同,参数列表不同时,这些方法称为重载的方法。

同名不同参

重载用于,在一个类中,某个方法在不同的条件下,执行不同的内容。

方法重载要求

方法名相同

参数必须不同(数量、类型)

与返回值无关

this和super关键字

这两个关键字,都可以当做对象使用,也可当做构造方法使用。

当做对象使用

用法:this.属性或this.方法,super.属性或super.方法

此时的this表示当前类的对象,super表示当前类的父类对象

当做构造方法使用

用法:this([参数])或super([参数])

此时的this([参数])表示当前类的某个构造方法。如this()表示当前类的无参构造方法。

super([参数])表示当前类的父类的某个方法。如super()表示当前类的父类的无参构造方法。

如果当做构造方法使用时,只能写在另一个构造方法的第一行。

注意

如果父类中有无参数的构造方法,在子类的构造方法中,可以不写super(),默认自动调用。

如果父类中有带参数的构造方法,没有无参数的构造方法,在子类的构造方法中,必须要有super([参

数])。

父类和子类中都没有构造方法(只有默认的无参构造方法)

父类中没有无参构造方法,子类中就必须调用父类中对应的构造方法

包package

通过包可以将.java源文件进行结构化管理,相当于windows中的文件夹。

不同的包中,可以保存相同的.java源文件。

某个类在某个包中时,会在该类的代码最上加入 package 包名 ;

导入包

如a包中的类要使用b包中的类时,需要在a包中的类中,导入b包或b包中的某个类。

如在使用Scanner时,就需要导入Scanner所在的java.util包。 import java.util.Scanner;

在IDEA中,如果是通过自动补全的形式写的代码,会自动导入该类,

或设置自动导包删包。

final关键字

修饰属性

当final修饰属性时,该属性的值不可更改,这个属性称为常量。

常量在程序运行过程中,保存的值不能编号,所以定义常量时需要初始化。

常量名所有字母大写,多个单词之间用_隔开。

修饰方法

当final修饰方法时,该方法不能被重写。

在方法的返回值前加上final。

修饰类

当final修饰类时,该类不能被继承。

定义类,在class前加final

重写equals方法

如果两个对象的属性全部相同,在日常的业务逻辑中,可以视为这两个对象是同一个对象。

但是默认使用new创建的对象,就算属性一致,也是不同的内存地址,

如果用==比较,比较的是对象的内存地址,地址不同,返回false。

所以对象比较相同不能使用==

这时就需要自定义一套比较的方法,Object中有一个equals方法,用于比较两个对象是否相同,

但是Object中的equals方法用==比较,所以对该方法进行重写。

如两个Student的id、name、sex都一致,返回true.

在IDEA中自动生成equals方法

在类中右键generate或快捷键alt + insert,选择equals and hashcode,选择属性。

如两个对象的id相同就视为同一个对象,可以只选择id属性;

如两个对象的所有属性相同才视为同一个对象,选择全部属性。

同时生成的hashcode()可以删除。

多态的应用

当某个方法的参数为父类变量时,可以传递一个子类对象。

这样就能在传递不同的子类对象时,表现出不同的形态。

如 要定义动物发出叫声的方法,参数是猫,输出猫对象的叫的方法"喵喵",参数是狗,输出狗对象的叫

的方法"汪汪"。

不用多态,需要写很多重载的方法,参数为猫或狗或其他类型。

使用多态,只需一个方法,参数为动物类,在动物类中定义叫的方法,让子类猫类狗类对其进行重写。

这时调用动物的叫的方法,实际会根据动物子类对象,调用具体子类重写后的方法。

abstract抽象的

修饰方法

使用:访问修饰符 abstract 返回值类型 方法名(参数列表);

如果一个方法的方法体无法描述,是由其子类进行重写后使用,可以将这个方法定义为抽象方法。

该方法就可以去掉方法体部分,该方法的所在类,也必须是一个抽象类,使用abstract修饰。

修饰类

使用:访问修饰符 abstract class 类名{}

如果一个类中有抽象方法,这个类必须也是一个抽象类。

abstract关键字特点

修饰类:被修饰的类称为抽象类

抽象类不能被实例化(不能创建对象);

抽象类中有构造方法,在创建其子类对象时自动调用。

抽象类中可以有普通方法,通过其子类对象主动调用。

抽象类中定义的所有抽象方法,子类要么全部进行重写,要么也定义为抽象类。

修饰方法:被修饰的方法称为抽象方法

抽象方法没有方法体

抽象方法只能出现在抽象类中

abstract不能修饰构造方法和静态方法

接口interface

在Java中,数据类型分为基本类型和引用类型。

引用类型包含:数组、类和接口。

所以接口是一种数据类型,类似于类,在定义接口的时候,使用interface替换class。

由于Java是单继承,如果类A既要继承类B中的内容,也要继承类C中的内容时,

如果用"extends class名",只能选择一个类继承,

但使用implements interface名1,interface名2...就能同时"继承"多个"父类".这里的"父类"就是接口。

通常用extends表示类A继承类B,用implements表示类A实现接口A,接口B...

一个类可以同时implements实现("继承")多个接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值