Java面向对象学习

DAY1-类和对象

对象是现实生活中看得见,摸得着的具体事物。

类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。

把具有相同属性和方法的对象归为一个类(class)

定义步骤:

①定义类名 ②编写类的属性 ③编写类的方法

创建对象

类名  对象名 = new 类名()

引用对象成员:使用“.”进行以下操作

引用类的属性:对象名.属性

引用类的方法:对象名.方法名()

面向对象思想(OOP)

只关注参与这个事件的对象,不关心具体过程,具体过程打散到多个对象,在main函数中可以组合出具体过程。

关于自定义类

用户自定义类就是一种数据类型

对象数组 UserInfo[ ]users = new UserInfo[50];

在Java中需要判定一个对象是否为空,和null进行比较;

两个静态串可以直接通过==比较,但一个静态一个输入,不可用==比较,使用equals()进行比较;

DAY2-类的方法

定义一个方法就是定义一个功能。也就是类可以有说明能力,可以做到什么事情

定义方法五要素:

①访问修饰符②返回值类型③方法名④参数列表⑤方法体

关于方法返回值

如果一个方法没有返回值,返回值类型不能省略,得写成void,代表没有返回值。

关于方法调用

如果两个方法不在同一个类中,我们要先实例化对象,然后通过对象名.方法名()调度。

如果两个方法在同一个类中,直接通过方法名称调用。

成员变量和局部变量

变量声明的位置决定变量作用域

全局变量指定义在任何函数之外的变量,也就是不被任何{函数体}所包含,作用域(有效范围)是从定义变量的位置开始到源文件(整个程序)结束。

局部变量指在一个函数(包括main函数)内部定义的变量,只在本函数内部有效,其他函数不能使用这些变量,函数的参数也是局部变量【方法结束,内部空间释放】 

类的方法
①带参方法【数组、对象都可以做为参数】

分为无参无返回值、无参带返回值、带参带返回值

<访问修饰符>返回类型<方法名>(<形式参数列表>){
    //方法主体
}

形参有类型,实参就是真实值

带多个参数方法调用时需注意:

(1)函数定义和函数调用参数名称不用一样

(2)参数个数、类型、顺序必须一致

② 递归方法

方法自己调用自己,这种调用称为“递归方法”

使用递归解决问题两个条件:

(1)把问题转化成一个新问题,而新问题的解决解法和原问题解法相同,只是问题规模变小。

(2)必须要有一个明确的递归结束条件(即递归边界)。

DAY3-抽象和封装

类的提炼过程

从现实生活中归纳总结出多种相同物种,具有的相同的特征(属性+行为)提炼到一个容器里,给这个容器起一个名字,就是类。

步骤:①发现类 ②发现类的属性 ③发现类的方法

ps:在开发过程中,先设计类图,然后定义类(需求在需求文档中,需求文档一般已文字描述),使用类图描述类更加形象和直观。

构造方法

构造方法没有返回值类型(主要完成对象的创建工作)

访问修饰符 构造方法名(){
    //初始化代码
}

系统提供默认无参构造方法

自定义构造方法:

①构造方法和类名相同

②没有返回值

③一旦自定义构造方法,系统将不再提供默认的构造方法

方法重载 

有多个方法,他们实现的功能相同,方法名称相同,但是参数列表不同;

有3层含义:1、参数的个数不同 2、参数的类型不同 3、参数的顺序不同

与返回值和访问修饰符无关。

普通方法可以实现重载,构造方法也可以重载

关于static

静态成员占用的内存是静态存储区,而且成员一旦变成静态,它就是类本身所有,只有一份,和对象没有关系,会一直生存到程序结束,占用空间大,不能将所有变量定义成静态。

JVM加载类时,加载静态代码块(由于类只被加载一次,所以静态成员也只被加载一次)

——如果有多个静态块,按顺序加载                     ——每个静态代码块只会被执行一次

static变量

类成员变量:

①类变量(静态变量)

(1)被static修饰的变量,在内存中只有一个拷贝

(2)类内部,可在任何方法内直接访问静态变量

(3)其他类中,可以直接通过类名访问

②实例变量

(1)没有被static修饰的变量

(2)每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

static方法

①静态方法(可以直接通过类名访问)

不能访问非静态成员

——不能直接访问所属类的实例变量和实例方法

——可直接访问类的静态变量和静态方法

②实例方法(通过实例访问)

——可直接访问所属类的静态变量、静态方法、实例变量和实例方法

面向对象三大特征

(1)封装

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

优点:①隐藏类的实现细节 ②只能通过规定方法访问数据

DAY4-类的继承

继承的用法

继承是代码重用的一种方式

class Pet {
    //公共的属性和方法
}
编写子类,继承父类
class Dog extends Pet {
    //子类特有的属性和方法
}

继承可以实现代码复用

在idea中,如何查看类的继承关系:对着要查看的类点击【右键】,点击【diagrams菜单】然后点击子菜单【show diagrams】即可。

在Java中,继承用的是extends关键字。

继承注意事项

①Java中类只支持单继承,不支持多继承

——一个类只能有一个直接父类

符合is-a关系的场景下我们使用继承

子类不能继承父类的如下内容:

private成员

子类与父类不在同包,使用默认访问修饰符的成员

构造方法

断点跟踪初始化过程

初始化顺序为:

1、父类属性

2、父类构造

3、子类属性

4、子类构造

子类重写父类的方法
重写规则:

——方法名相同

——参数列表相同

——返回值类型相同或者是其子类

——访问权限不能严于父类

重载VS重写

方法重载(overload)是同一个类中的多个方法,方法名称相同,参数列表不同,和返回值没有半毛钱关系。

方法重写(overwrite):在不同的类中,有继承关系,有命名方法。子类的方法可以覆盖父类的同名方法,这个现象就称为方法重写。

名词位置方法名参数列表返回值访问修饰符
方法重写

子类

相同相同相同或是其子类不能比父类更严格
方法重载同类相同不相同无关无关
super的使用

在Java中,使用super访问父类成员

——super不能访问父类私有成员

——super调用构造方法时,只能是第一句

this和super

this是当前类的对象,super指的是父类对象

Object类

必须记住:Object类是所有类的父类,任何类默认都继承自Object类。

以下方法经常被子类重写

toString()返回当前对象本身的有关信息,按字符串对象返回
equals()比较两个对象是否是同一个对象,是则返回true

 Object是所有类的父类,Object类在Java。lang包中;Object有一个常用方法,toString().任何对象直接打印名字,就会自动调用它的toString()方法。Object的toString()主要打印的信息内容为类的全名称以及地址。我们自己可以重写Object的toString()。

Object的==和equals()是一样的,都是比较两个对象的地址是否相同。

String类改成了equals()方法。内容是否相等,而不仅仅是地址是否相同。

equals()方法

之前我们提到过,两个字符串是否相等的判定得用equals,不能用==,接下来我们来揭秘:

Object类的equals()方法:(alt+7)

——比较两个对象是否是同一个对象,是则返回true

——操作符==

1、简单数据类型,直接比较值。如1==2

2、引用类型,比较两者是否为同一对象

==运算符,对于简单类型,就是比较真实值。对于引用类型,比较的是地址

equals说明

(1)Object类的equals()方法与==没区别

(2)当有特殊需求,如认为属性相同即为同一对象时,需要重写equals()

(3)Java.lang.String重写了equals()方法,把equals()方法的判断变为了判断其值

抽象类和抽象方法

Java中抽象类使用abstract修饰

抽象方法也使用abstrcat修饰

注意点:

——抽象方法没有方法体

——抽象方法必须在抽象类里

——抽象方法必须在子类中被实现,除非子类是抽象类

——抽象类中可以有非抽象方法

final关键字

使用final修饰的类不能有子类

使用final修饰的方法不能被重写

使用final修饰的变量会变成常量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值