JAVA基础知识之面向对象!

JAVA基础知识之面向对象:

1.封装(面向对象特征之一

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

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

封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。

A:类的书写:

一个类中可以书写的成员有以下几种:

成员变量:其实对应的就是事物的属性。

成员方法:其实对应的就是事物的行为。

set和get函数;

其他一般函数;

构造函数;

注意:先有类后有对象,类是对象的抽象,对象是类的实例化。

a:成员变量和局部变量的区别:

1:成员变量直接定义在类中。

   局部变量定义在方法中,参数上,语句中。

2:成员变量在这个类中有效,有默认值。

局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。(必须初始化,无默认值)

3:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。

局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

B:构造方法:

 概念:构造函数就是在创建对象时由JVM自动调用的函数,作用是在创建对象时给对象的成员变量赋值的;

写法

修饰符:构造函数只能使用访问权限修饰符修饰;如public、private等;不允许使用static关键字修饰构造函数

返回值类型:构造函数没有返回值类型,连void都没有;这个是区分一个函数是否是构造函数的标准

函数名:构造函数的函数名必须和类名一致

参数列表:构造函数可以重载,参数列表可以根据需要定义;

return语句:所有Java的函数都需要通过return语句出栈,所以构造函数中也有return语句,只是因为不返回数据,所以一般不写;

a:默认构造方法:

在Java中,所有类都有构造函数,使用new关键字创建对象时都会调用构造函数;如果类中没有写,则编译器会自动添加一个构造函数,这个构造函数就是默认构造函数。构造函数没有参数;如果类中手动书写了构造函数,就不会有默认构造函数;

 

一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

b:构造方法和一般方法有什么区别呢?

1两个函数定义格式不同。

2构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。

    一般函数,是对象创建后,需要调用才执行,可以被调用多次。

c:构造代码块和构造函数有什么区别?

构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。

构造函数:是给与之对应的对象进行初始化(给成员变量赋值)。它具有针对性。

C:对象内存位置

  对象在内存中的位置:

对象由new关键字创建,如同数组,实体存在于堆内存中

任何事物均可以定义成类,创建对象,属于引用类型

对象的引用变量是一个普通变量。存储的值是该对象堆内存中的地址

D:this关键字

 this表示本类对象

this关键字,一般出现在不带static关键字修饰的函数里面,表示对调用这个函数的对象的引用,也就是哪个对象调用这个函数,函数中的this就指向那个对象;

一般用来区分成员变量和局部变量;

作用:

1.this表示本类对象

2.区分同名变量和局部变量

3.this(参数类表)调用本类的构造方法:必须放在代码第一行

一个构造函数中调用本类的其它构造函数:

注意:当使用this关键字调用其它构造函数时,必须放在构造函数的第一行:

E:匿名对象

匿名对象就是没有名字的对象;

对象的名字就是保存了这个对象的引用地址的变量;

所以匿名对象,就是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

a:匿名对象特点

1.匿名对象必须创建的时候就直接使用;

2.匿名对象只能使用一次;

3.匿名对象可以作为方法的返回值或者给方法传参;

 

2:继承(面向对象特征之二

a:继承概述:

  1. class 儿子类名 extends 父亲类名
  2. {
  3.     属性列表;
  4.     方法列表;
  5. }
  6. class A extends B
  7. {
  8.     属性列表;
  9.     方法列表;
  10. }
  • 术语 :

A 类是 B 类的子类, 也称为派生类。   Derived class

B 类是 A 类的父类, 也称为基类、超类。 Super class

继承的效果 : 子类从父类继承,代表子类 `无条件` 拥有了父类 `可继承` 的全部成员属性和方法.

总结 : 子类 "无条件" 拥有父类全部可继承的属性和方法继承是类在继承,而不是对象在继承.

 

父类和子类(派生类)之间的

继承的注意点

1> 继承是类在继承,而不是对象在继承. 每个对象之间是毫无关系的.对象的属性值相互之间不会影响.

继承的意思: 子类从父类继承.相当于子类拥有了父类的所有成员.这个时候创建一个子类对象,子类中不仅有自己的特有成员也有父类中的共有成员.

2> 什么时候需要使用继承 ? (is a 关系)

当发现多个类具有相同成员的时候,那么就可以使用继承.将共同的成员定义在父类中,让子类去继承.

3> 不要为了仅仅只是得到某个类的成员而去继承.不要为了继承而继承.

: Worker : Dog (因为 Dog 类中有姓名和年龄) 语法上其实任意的类之间都是可以继承的.情理,逻辑上并不是任意的类之间都可以继承的.只有满足A类是一个B类的时候,才可以拥有继承关系.A类去继承B.同样可以理解为只有子类是一个父类的时候,才可以继承.

  • 继承强调的是: 同一个 "物种".

4> 只要有一个成员或方法不是所有子类都拥有的,那么这个成员属性和方法就不应该定义在父类之中. : 鸟类中的"fly"方法. 因为并不是所有的鸟类都会飞.只要有一个成员不是所有的子类都拥有的,那么这个成员就不应该定义在父类之中.

5> 子类不能直接访问父类中私有的成员变量(不能继承,但是子类对象的内存中有该属性)

6> 子类一定不要拥有和父类同名的成员变量. 因为子类可以继承父类的成员变量.

 

3.多态(面向对象特征之三

  A:接口:interface

说明 : 抽象类中可以有抽象方法, 但同时也可以包含非抽象方法.

定义:如果一个抽象类中所有的方法都是抽象的,则可以将这个类用另外一种方式来定义, 即接口.

注意 :

  1. interface + 接口名    定义一个接口(级别和class相同)

①:接口不是类,不属于java的类继承体系中

2.接口中定义的方法默认使用 “public abstract” 来修饰,且接口中只有抽象方法.

3.接口中变量默认使用 “public static final” 来修饰 .使用类名直接访问. 接口中的变量,都是常量。因此接口中的变量名一般都会全部大写。

  1. 接口不能实例化,实际上连构造方法都没有

实现接口:由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法.此时需要定义一个类,并使用 implements 关键字实现接口中所有的方法.

 *   1. 语法: class A extends B implements C(接口)

 *   2. 如果有抽象方法,普通类必须全部重写,但凡有一个抽象方法没有抽象,此类就必须是抽象类

注意 : 一个类在继承另一个类的同时还可以实现接口,此时 extends 关键字必须位于 implements 关键字之前.

, 接口 之间产生关系:

  1. 类和类之间的关系是继承,使用extends关键字完成
  2. 类和接口之间的关系是实现,使用的 implements 关键字完成

接口与多态 : 接口类型可以接收任何实现了该接口的实现类对象.  (多态)

总结:

类和类:继承关系,一个类只能继承一个父类。                          单继承

类和接口:实现关系,一个类可以实现多个接口。           多实现(implements)

接口和接口:继承关系,一个接口可以继承多个接口。 多继承(解决类和类的不能多继承的问题) 格式:A extends B,C;

类和类之间是继承,存在子类和父类的关系。子类需要覆盖父类的方法时,我们称为方法的重写。

类和接口之间是实现关系,实现接口的类,一般称为实现类,实现类中对接口中的方法进行重写的书写。这时称为实现类对接口的方法进行的实现,实现类拥有接口所有的属性和方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值