关于java面对对象开发我自己的理解

本文深入讲解面向对象编程的核心概念,包括类与对象、封装、继承、多态等关键特性,探讨了构造方法、this关键字、静态变量与实例变量的区别,以及方法重载与重写的原则。

首先他们需要理解的核心概念就是类和对象
关于面对对象的大概念
1.1 面对对象的基础知识;
{
类:主要是一系列对象的集合情况,再具体讲,类是相同属性和服务的
一组对象的集合
对象:就类似于具体的东西;更类似与实体;
例如一个学校就可以看成一个大类
而里面具体的学生和老师就像一个个对象。
}
面对对象的的语言都有三个特性:
{
1:封装性:对外封装者,只保留对外的接口。
2:继承性:由子类继承父类,被继承的类称为一般类,也称父类,
或超类。继承的类称为子类,或派生类。继承的关键字是extends
3:多态类:父类被子类继承之后,表现出不同的状态。
}
1.2 类
类是java中的最小的部分:
例如: class A{
}
这就是一个最小的类只有类名和{};
类是最开始定义你接下来要做的对象的属性的集合;
一个类的基本构造方法就是类声明部分+类体
首先先去讲什么叫做类声明
类声明:就是你在定义这个类的时候封装一类对象的属性和方法
public:公共的他所修饰没有限制可以在任何情况下访问。
private:他所修饰的成员变量和成员方法只能在一个类里被
访问在类外部无法被访问。
protected:保护级别
他所保护级别他所修饰的成员变量和成员方法,在同一个包中与默认级别没有区别
在不同包中采用继承访问的话可以访问,非继承的访问无法访问;
保护他所修饰的成员变量和方法能够被它的子类继承无论在一个包里或在不同包里。
这些关键性的字符与java的封装性有很大的关系。
一个标准的类声明:修饰符+class+他所继承的类名+接口。
这里的继承和接口会在后面去进行讲解。
下面来介绍类体:
一个类体包括两部分一个是成员变量和成员方法
成员变量:成员变量定义了一个类的属性:可以被类里面的成员方法所调用
一个成员变量的定义包括两部分:一个是对所声明类型的定义+你定义的名字
例如使用int,byte,short,long,float,double,char,string,boolean
int,byte,short,long:对整型的定义
float,double:对小数和浮点型的定义
char,string:对字符的定义,输出字符
boolean:布尔类型的定义;
在定义成员变量的时候也可以加入:public,protected,private去改变那你所定义的
成员变量的使用范围。
static:用于声明静态变量,final:给变量修饰之后无法被修改
成员方法:成员方法类似于描述了对象所具有的功能和操作,反映对象的的行为具
有相对独立的程序板块。
一个类和对象可以有多个成员方法,对象通过成员方法对传来的消息进行响应完成
特定的功能。
成员变量的定义:返回值类型+static+final|adstract+方法名(参数列表)+{}
publi,protected,private用于封装方法
static:静态方法
void:无返回值类型
当调用的时候可以使用:方法名(参数列表)
要注意的是在调用的时候必须要注意他们的实参个数,顺序以及他们的数据类型
必须和他们形参的相同
1.3 对象的创建
对象就是为了实现类的属性和行为而实例化,也就是说一个类实例化产生对象
实例方法就是对象方法,实例变量就叫做对象属性,一个对象的创建使用和销毁是一个
生命周期。
首先我们要先学会如何去创建一个对象
创建对象包括两个部分:一个是对象的声明一个是实例化
声明的格式是:类名 对象名;
例如有一个person的类,person p;
这就创建一个类,他只是指向一个中间的数据结构对实际对象的无法进行改变。
Person person=new Person();
这就创建了一个新的对象给它实例化了。
访问对象的属性和行为:对象的使用包括对成员变量的使用和使用其成员方法,可以通过成员运算符“.”来进行访问和调用。
类名+对象名==new+类名();
这就是在类名之中申明了一个新的实例变量;
使用格式为 对象名.对象的成员变量;
接下来介绍一下set和get的使用:

Set+类名(参数列表){
This.类名=类名+;
}
Get+类名(参数列表){
Return+类名+;
}

set是设置的意思,而get是获取的意思,
顾名思义,这两个方法是对数据进行设置和获取用的。
而且,在类中使用set和get方法时,都是在set和get后面跟上一些特定的词来形成特定意思的方法名,
比如setage()和getage(),表示设置年龄和获取年龄。
然后我们来了解一下JAVA面向对象编程中的封闭性和安全性。
封闭性即对类中的域变量进行封闭操作,即用private来修饰他们,
如此一来其他类则不能对该变量访问。这样我们就将这些变量封闭在了类内部,
这样就提高了数据的安全性,当我们想要操作这些域变量怎么办呢?我们可以通过两种方法
,第一中即通过public方式的构造器(或称构造函数),对象一实例化就对该变量赋值。
第二种就是通过上面提到的set和get方法,这里我举一个特定的例子,
我定义一个Person类,该类中有name、age这两个私有域变量,
然后我定义setname()、getname()、setage()、getage()这四个方法,
通过这四个方法来实现对name和age的操作。这样一来,我不用直接对Person类中的域变量操作,
而是通过set和get方法间接地操作这些变量,这样就能提高域变量的安全性,同时又保证了域变量的封装型。
最后说说set和get方法的使用场景,一般来说set和get方法都是对私有域变量进行操作的,
所以大多数都是使用在包含特定属性的类实体中。
现在你明白set和get方法了吧,其实这两个方法只是类中的setxxx和getxxx方法的总称。
1.4 静态变量和实例变量之间的关系
对象被创建之后是被实例化了
而使用static定义的变量和方法被称为静态变量和静态方法
Abstract:是抽象类:无法被实例化,接口也一样,不能创建实例化
在类名之中有四个访问限制符:
Public,默认,private, protected
他们实现了对java的封装
静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,
必须创建了实例对象,其中的实例变量才会被分配空间,
才能使用这个实例变量。静态变量不属于某个实例对象,
而是属于类,所以也称为类变量,只要程序加载了类的字节码,
不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,
并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,
就会分配一个instanceVar,即可能分配多个instanceVar,
并且每个instanceVar的值都只自加了1次。

//例如
public class Test11 {
	public static int staticVar = 0;
	public int instanceVar = 0;

	public Test11() {
		staticVar++;
		instanceVar++;
		System.out.println("staticVar=" + staticVar + ",instanceVar="
				+ instanceVar);
	}

	public static void main(String[] args) {
		Test11 test = new Test11();
		Test11 test1 = new Test11();
		Test11 test2 = new Test11();
	}
}

通常的成员变量有俩种:
一种是被static关键字修饰的变量,叫类变量或者静态变量
另一种没有static修饰,为实例变量
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,
静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,
其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。
抽象类更象是一个模板,static修饰的成员变量或者成员方法不会被轻易改变,更相类似一个企业的logo
一但改变其他的他所生产的东西,无论是之前还是以后的都要改变
1.5方法重载:
方法的重载也可以表示到构造方法中,不同的构造方法传的参数不同,赋的值也不同。在main主函数中调用的时候,也可以根据你传的参数去找你想要的构造方法
Java中在同时有两个相同类名的时候只要他们的参数列表不同即可访问叫做方法重载。
indexOf
方法重载:方法名相同参数列表不同;
参数列表不同
{参数的个数;
参数的类型不同;
}
返回值是否能够影响方法重载呢?==不影响;
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数
的个数。调用重载方法时,Java编译器能通
过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参
数的个数不同的方法。 Java的方法重载,就
是在类中可以创建多个方法,它们可以有相同的名字,但必须
具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通
过传递给它们的不同个数和类型的参数来决定具体使用哪个方法
在调用的时候赋值的参数不同调用的方法不同实现的值不同
1.6构造方法
构造方法有几个特点:
1:构造方法没有返回值,也不用void修饰
2:构造方法的名称要与本类的类名相同
3:构造方法可以重载
4:构造方法无法被直接调用,只能通过new字符创建对象的时候系统自动调用
对象名+类名.方法名();
去调用构造方法
在创建对象虽然前面可能并没有定义构造方法但是他会有默认的构造方法而且可以同时创建很多个构造方法但是不能相同可以通过传进去不同的参数去调整但你所想用的方法。在main方法中new对象的时候要注意你传的参数
Eg: person po=new person();
他的默认构造类型里面是空不能在里面直接赋值,但是可以通过重写构造方法去得到你想要的传的参数
1.7 this的用法
This 和总体来讲有调用的能力主要是调用当前在cpu上运行的对象调出他的对象或者他的方法
第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,
此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。
当然,在没有同名的情况下,可以直接用成员变量的名字,
而不用this,用了也不为错,呵呵。
第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
2.1 继承与多态的使用
我们先讲继承:一个类分为两种一种叫父类
一种叫子类。父类又叫做基类和超类,子类又叫做派生类。在继承的时候使用关键字
Extends来继承另一个你设计的类
标准:修饰符+class+extends+父类名{}
但是在java中为了安全性,java只支持单继承,为了符合多继承,java中采用了接口来代替其他编程语言的多继承关系。
在继承之后子类可以改变父类的变量
并且在子类与父类具有相同的属性和方法的时候可以在子类中定义新的成员变量并且可以覆盖父类的变量。如果我们在子类中仍想要调用可以使用super关键字来调用
多态其实是很大的一部分例如方法的重载方法的重写或者向上转型向下转型都可以叫做多态,多态实际上指的是程序的灵活性
2.2方法重写
子类覆盖父类的继承的方法叫做方法重写
前面的方法重载是指在不改变父类的时候调用而方法重写会改变父类的算法
重写的时候需要注意的:
1,覆盖的时候:方法名称,参数列表,返回值类型都必须相同,而执行的方法体不同
2,重写的方法不能比之前的访问级别更严格
3,可以重写部分的方法 super.原父类方法名()。
4,不能重写final的方法
5,Static中父类和子类的方法必须一样

2.3 继承的概念和设计
继承的就像父与子的关系·;
被继承的类叫做父类,基类和超类
继承的类叫做派生类和子类;
继承之间中:父类可以是自己定义的类也可以是系统库里的类
【修饰符】class 子类名 extends 父类名{
//定义新的属性
//定义自己的属性
//定义新的成员变量
//重写父类的继承方法
}
Java中只支持单继承,所以为了使用多继承java定义了新的接口,
继承的属性和拓展
1:属性的定义会拓展父类的属性和拓展自己的成员变量
2:属性隐藏:当子类重新定义父类之后会自动覆盖父类的属性和成员变量,如果还想用之前父类的关键字要是有super来调用父类的属性。

方法重写;有条件的标准;
1:重写的方法要与父类的方法完全相同的方法名称,参数列表,返回值类型
2:重写之后的方法不能比之前的访问控制更严格。
3:重写之后的父类方法可以在原方法上加入父类的方法,添加语句super.原父类方法名();
4:不能重写父类的final的方法final方法的定义就是为了防止子类的方法重写父类的方法
2.4 接口
接口的使用其实是为了填补java不能够多继承而出现
接口的定义是interface
定义的接口里面可以放很多抽象类的方法或者fianl的属性
本身他不能直接使用需要其他类实现他之后再进行使用如果将接口中有抽象类的话必须要实现其中的方法,如果不能实现的话要把实现的类也编辑成static

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值