面向对象知识

封装是将相似对象的属性和方法抽取出来形成类型,实例化生成对象。类型中的属性和方法有不同访问控制,如公开、私有等。构造方法用于初始化对象属性,无返回值且名称与类名相同。继承允许子类扩展父类的功能,重写则允许子类根据需要调整父类方法。抽象类包含抽象方法,没有方法体,需子类实现。final和static分别用于锁定变量、方法和类,防止被修改或继承。
摘要由CSDN通过智能技术生成

1.什么是封装

​ 将相似的对象,放在一起,提取出来相同的属性以及方法的过程叫做抽象,将通过抽象过程提取的属性与方法重新放置在一个范本里面,这个范本就是类型,而生成这个范本的过程叫做封装。
​ 封装生成了一个类型,通过这个类型创建一个对象的过程叫做实例化。
​ 封装时,针对可以用名词定义的特征叫做属性,可以用动词定义的特征叫做方法。当我们创建一个对象的时候,就等于我们创建了一个整体,里面包含了类指代的所有属性以及方法。

在我们封装一个类型时,我们需要同时指定这个类型所具有的属性以及方法的访问控制。包括,公开,友元,默认(包), 私有,这些个过程分别对应任何地方都能访问,有关系才能访问,同一个包内可以访问,只能在该类型中访问。

同时,我们学习了方法,方法应该具有返回值类型,方法名, 参数列表, 方法体。一个类型中不能出现同名的属性,但是一个类型中可以通过参数列表的不同,出现同名的方法,这个过程我们叫做重载。

构造方法

构造方法: 是用来创建对象的方法,构造方法一般用来初始化对象应该具有的属性。一个类型其实必然有一个构造方法,当我们没有显性的定义一个构造方法的时候,那么JAVA会给我们一个默认的,没有参数列表,没有方法体的构造方法。但是如果我们定义了一个构造方法,那么这个默认的构造方法就会消失不见。
构造方法一定要注意,其没有返回值类型(void也是一种返回值类型,不是说构造方法返回的类型是void)构造方法的方法名一定要和类名保持一直,且大小写敏感。

所有的方法和属性,都可以加上访问控制,这里要注意。构造方法也是方法,也可以加上访问控制。如果在构造方法上加上访问控制private,那么这个类型的对象只能由这个类型自己创建,别人创建不了。

构造

构造方法在继承的过程当中,表现出来这样一个特点,当我们去创建子类的对象时,会首先调用父类的构造方法,但是又因为JAVA中,如果我们不显式的定义一个构造方法的话,那么JAVA会给我们提供一个默认的没有参数的构造方法,于是子类构造方法中,如果我们不写调用哪个有参数的父类构造方法的话,它就会默认先调用父类中没有参数的构造方法。

但是根据之前学习的知识来看,如果我们在父类中定义一个构造方法,那么JAVA给我们的默认的构造方法就会消失不见,这个时候,如果我们在父类中定义的构造方法,也没有参数,那么不会引起子类的异常,但是如果父类中的方法包含了参数,那么就会引起子类中没有无参的构造方法可调用,于是,我们需要在子类的构造方法的!第一行!使用super关键字加()来指示需要调用父类的哪个参数集合的构造方法。(因为子类对象在被创建之前,一定 先创建父类对象。)

继承

首先,继承在软件体系里面的继承,更像是一个扩展,包括JAVA中的类继承的关键字,都是extends(扩展的意思)

当我们定义一个类型,而这个类型是一个比较泛泛的类型(范围很广泛),但其实我们需要的是一个相对来说不是那么广泛,而是比较明确的类型,那么我们就可以在原来的类型基础上创建一个新的类型,也就意味着,原来类型中定义的所有的属性和方法都可以原封不动的继承到这个由原有扩展出来的类中,这个过程叫做继承。

在继承的过程中,有一些场景,我们要熟记并学会使用

子类和父类

相对比较泛泛的类型,叫做父类,由父类扩展出来的类型叫做子类

单继承

JAVA只支持一个类型继承另一个类型,不能同时继承两个类型(这两个类型是同一个Level的),但是JAVA支持链式继承

继承中的访问控制

原来的访问控制我们学习了,public package private 还有一个

关系publicprotectedpackageprivate
任意关系可以不行不行不行
友元关系可以可以不行不行
同包之内可以可以可以不行
同类型之内可以可以可以可以
重写

重写是指在继承的过程中,子类发现父类定义个方法并不能真正的有效的解决子类问题,所有子类可以按照自己的问题解决方式,重新对该对象进行定义,但需要注意的是,这个定义过程不能修改返回值类型,方法名和参数列表,能修改的是方法体,但是其实访问控制也可以修改。

继承的构造方法

首先我们要知道构造方法是不能被继承的。原因是构造方法特点,方法名和类名保持一致,如果你要继承构造方法,从方法名上就和父类一样了,但是类名又不能一样,于是就冲突了所有构造方法不能被继承和重写

然后:构造方法,是我们在创建对象的时候调用的方法,那么如果我们创建一个子类的对象,也必须要先调用父类的构造方法。

构造方法又有重载的可能性,所以如果父类中没有参数的构造方法,也就是说可以不显示的调用,但是如果要调用有参数的构造方法,那么你就得先通过参数列表的构造方法

抽象类

有些父类在定义一些方法的时候,其实这个方法他也不知道是应该怎样实现,但是他知道必须要有这个方法,于是他定义了这个方法,那么子类不实现就是错误的,或者子类不知道这个方法应该如何实现的时候,也就是继续将这个方法传递给下一个类型。这个方法我们叫做抽象方法。

一个抽象方法,是指被abstract修饰的方法,它存在的价值是要求子类必须重写他,所以他(反正子类都有重写,子类不重写就孙子类重写,谁不写谁就不能创建对象)就没有方法体

而抽象类就是被abstract修饰,可以承载抽象方法的类型

abstract修饰的方法就是抽象方法,特点就是没有方法体,需要子类重写

abstract修饰的类型就是抽象类,特点就是可以承载抽象方法,不能直接创建对象

引出两个关键字:final和static

final:最终的意思,其内存解释是指针已经定了,指针不能改变了,但是JAVA里面没有指针概念,那么这个指针概念就是引用概念

final可以修饰属性,方法,类

final int a = 3;
//这个a他不是一个对象,他是一个基础数据类型,而基础数据类型,而基础数据类型的值是放置在常量池里面
//也就意味着这个值,你都不能改变。因为你要改的下一个值,是在常量池里面放置,
//你只能通过改变a指向的地址来改变a的值,所以a的值是不能改变的
final int[] arr = new int[10];
arr[0] = 45;
//我们不能再写一个 arr = new int[20];
//但是我们可以写 arr[0] = 30;

final修饰方法:意思就是这个方法不能改变,(因为方法,其实从某种意义(反射)上说,他也是一个对象,如果你重写了,就是改变了这个对象的指向这个是不行的)。也就是说,这个方法在类继承过程中,是不能被重写的。

final修饰类:这个就是这个类型都不能被继承。更别说重写了。

static:可以修饰属性,方法,类(内部类),代码块

static修饰的所以的东西,都被上升到类级别。而不是对象级别。类级别的特点,通过类名去进行调用,而不是通过对象进行调用(不是说不行,而是不需要)。

static:可以修饰方法,上升成为类级别的方法,而不是对象级别的方法。

static:可以修饰代码块,代码块存在的意义:对象属性想要初始化,可以在构造方法里面初始化,但是如果我想要初始化的是类属性?我们要知道,类可是先与对象的存在而存在,就是说在你没有调用构造方法之前,类属性就已经存在了。

类属性优先与构造方法, 构造方法不能初始化静态的类属性,那么就找到静态代码块,用他来初始化静态属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值