JAVA05-java面向对象

一、概述

面向对象:

就是不断的创建对象、使用对象、指挥对象做事情的思想

二、类和对象的关系

1、类:

是Java的基本单位,主要是用于描述现实生活的事物,包含了成员变量(属性)、成员方法(行为)、和构造方法。

2、对象:

语句定义格式:类名 对象名 = new 类名();

对象可以看作是一个类的具体的实例,通过一个类构造多个不同的对象。

3、对象访问成员的方式:

①访问成员变量:对象名.成员变量名

②访问成员方法:对象名.成员方法名(XXX)

三、三大特征

1、封装

封装就是隐藏类中实现的细节,对外提供公共的方法。

关键字:

private :是一种私有的权限修饰符,可以修饰成员变量、成员方法和构造方法。被private修饰的成员变量只能在本类中被访问。

this :用于方法中,表示调用当前该方法的对象,访问成员时通过this.(成员)

static :静态修饰符,可以修饰成员、成员方法、静态代码块和静态内部类。

static的特点:

①、可以直接通过类名的方式访问静态的成员变量和成员方法。

②、随着类的加载而加载,优先于对象而存在。

③、被static修饰的成员,称之为类成员。

④、静态的成员方法只能访问静态的成员(静态的成员变量或者静态的成员方法)。

⑤、非静态的成员方法既可以访问静态的成员,也可以访问非静态的。

⑥、静态的成员既可以通过类名直接访问,也可以通过所属类的对象来访问,推荐使用类名访问。 

构造方法:

构造方法是在创建对象时,通过构造方法在堆内存中为该对象开辟空间。

语句定义格式:方法名和类名一样,没有返回值类型。

构造方法的特点:

1、构造方法可以发生重载,构造方法可以传入参数,在创建对象的同时给对象的成员变量赋值。

2、如果我们不提供构造方法,jvm会在编译的时候提供一个默认的无参无具体实现的构造方法,若我们自己提供了构造方法,系统都不会再提供默认的构造方法。

一个对象初始化的过程(Student s1 = new Student())

1、先将Student类加载到方法区中。

2、在栈中为s1变量开辟空间。

3、在堆内存中为s1对象开辟空间。

4、给成员变量赋予系统默认值。

5、显示初始化。

6、构造方法初始化。

7、将堆内存中的对象地址值赋值给栈中的变量s1。

8、后续可以通过方法对成员变量再进行修改值 。

代码块: 

1、局部代码块:在方法内部仅使用大括号括起来的代码块叫做局部代码块。

2、构造代码块:写法和局部代码块写法一样,只是写的位置位于类中方法外,没创建一次,都会执行一次。

3、静态代码块:写法在大括号前加上static,写在类中方法外,只会在类加载的时候,仅执行一次 。

4、同步代码块:属于类中的成员,类似于方法,将逻辑语句分装在方法体中,通过大括号括起来。

引用数据类型和基本数据类型当做参数

①、当基本数据类型作为方法的参数类型的时候,将来调用时需要传入具体的数值。 

②、当引用数据类型作为方法的参数类型的时候,将来调用时需要传入该引用数据类型的对象。

2、继承 

继承就是将多个类中相同部分提取到一个类中,然后与这个类产生继承关系,就拥有了这个类中的成员 。

关键字:

 extends : 继承

语句定义格式:

class A extends B {}

A:子类、派生类

B:父类、基类、超类

继承使用注意事项:

①、类与类之间只能单继承,不能多继承。

②、可以多层继承,形成继承体系。

③、子类只能继承父类中非私有的成员。

④、子类无法继承父类的构造方法,但是可以使用。

⑤、子类无法继承父类中的静态成员,但是可以使用。

⑥、要想初始化子类,必须先初始化其父类。

super :代表的是直接父类的引用,可以在子类中使用直接父类的成员

super注意事项:

①、针对在子类中使用super调用父类的构造方法的时候,子类的构造方法默认第一句话是super()。

②、若父类中没有无参构造方法,可以使用super显示地调用父类的有参构方法进行初始化 。

final :最终的、不可改变的。可以修饰类、成员方法、变量

修饰类时类无法被继承、修饰成员方法时成员方法无法被重写、修饰变量时变量值无法更改,变量变常量。

final的初始化时机:必须在构造方法完成之前赋值。

重写: 发生在继承关系中,子类的方法名,返回值类型,参数列表,都与父类的一样,只是方法体实现不一样,可以使用@Override来验证

重写的注意事项:

①、子类无法重写父类中私有的成员方法,静态的成员方法。

②、子类重写的方法权限修饰符不能比父类的还要低,无特殊要求的话,和父类的权限保持一致。

 3、多态

多态是指某一事物在不同状态下的多种形态。

实现多态的三个前提:

①、要有继承关系。

②、要有方法的重写。

③、要有父类的引用指向子类对象。

访问成员的特点:

①、访问成员变量时,编译看左运行看左。

②、访问成员方法时,编译看左运行看右。

③、访问静态成员方法时,编译看左运行看左。

多态的好处:

①、提高了程序的维护性(继承)

②、提高了程序的扩展性(多态)

多态的弊端:

①、在多态的形式下,无法使用子类中特有的成员方法(解决方案:向下转型)。

②、向下转型可能会遇到的问题。ClassCastException 类转换异常。

四、抽象类

使用abstract关键字进行修饰 ,是用来描述现实生活中抽象的概念集合。

特点:

1、abstract可以修饰类和成员方法。

2、一个抽象类中,既可以存在抽象方法,可以存在具体的实现方法。

3、当一个类中有抽象方法的时候,这个类必须是抽象类。

4、抽象类可以继承抽象类,可以选择性地重写方法。

5、具体的类继承抽象类的时候,必须要重写所有的抽象方法。

6、抽象类不能实例化。

五、接口

主要是用来描述事物额外的扩展功能的作用

关键字:interface

特点:

1、接口中只有常量,所有的变量将来默认会使用public static final进行修饰。

2、接口中只允许出现抽象方法,所有的方法将来默认会使用public abstract进行修饰。

3、具体类实现接口使用implements关键字,当具体的类实现接口的时候,必须要实现接口中所有的抽象方法。

4、一个类可以同时实现多个不同接口。

5、接口与接口之间的关系是继承关系,一个接口可以同时继承多个接口。

6、接口无法实例化。

六、形式参数和返回值类型的对比

1、形式参数

①、当你看到一个类作为方法参数类型的时候,将来调用时需要传递该类及其该类的子类对象。

②、当你看到一个抽象类作为方法的参数类型的时候,将来调用时需要传递继承该抽象类的具体子类对象。

③、当你看到一个接口作为方法参数类型的时候,将来调用时需要传递实现该接口的具体子类对象。

2、返回值类型

①、当你看到一个类作为方法的返回值类型的时候,将来方法内部应该返回该类或该类的子类对象。

②、当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部应该返回继承该抽象类的具体子类对象。

③、当你看到一个接口作为方法的返回值类型的时候,将来方法内部应该返回实现了该接口的具体子类对象。

七、内部类

1、成员内部类

将类定义在类中的成员的位置上

形式1:没有使用static或者private关键字修饰

外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

形式2:使用static关键字修饰

外部类名.内部类名 对象名 = new 外部类名.内部类名();

形式3:使用private关键字修饰

外界使用不到,只能在类中使用

2、局部内部类

将类定义在方法的内部

特点:

①、只能在方法的内部中进行使用。

②、方法定义的局部变量,在局部内部类中是不能进行修改的,默认是会被加上final关键字。

八、匿名内部类

语句定义格式:new 抽象类/接口/类(){
   //重写方法
}

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

网络!搬运工

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

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

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

打赏作者

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

抵扣说明:

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

余额充值