面向对象:
编程语言发展(不用记)
面向过程的设计思想
面向对象的设计思想
对象和类的概念
类之间的关系
对象和引用
JAVA类的的定义
构造函数
对象的创建和使用
this关键字
static关键字
package和improt语句
访问控制
类的继承
方法的重写
final关键字
Object类
对象转型
多态
抽象类
接口
1、编程语言的发展
例如我要去新疆:
2、面向过程的设计思想
对于每一个过程你必须了如指掌,以我为中心
我开车、我挂挡、我踩油门、……
3、面向对象
你隐藏了这个类和方法而是你重复对这个对象的使用
直接命令车去新疆,直接调用去新疆的方法。
其实车自己最了解去新疆的过程,而我们只管去调用,我们不管类里面的方法变没变,变量有没有变
我们不管
对象和对象之间其实有各种各样的关系,如抽象、分类、继承、聚合、多态等。
对象和类的概念:
其实最本质上是面向类的关系
问你一下什么叫瓶子:你怎么去定义它
你给瓶子下定义的过程,其实瓶子是一类事物的抽象
瓶子有些静态的属性,瓶子有些动态的属性
瓶子有盖子,属于静态的属性
瓶子可以倒水,属于动态属性
静态属性相当于成员变量,动态属性相当于方法
瓶子是一个类,某个瓶子相当于一个对象
根据一个类可以衍生出不同的对象
其实属性或是成员变量指的是同一个概率
猫是一个类,这只猫和那只猫都是对象
对象可以看成该类的一个具体事例,事例和对象是同一回事
类是一类具有共同特征一类事物的抽象
对象是这个类的一个具体实例
类(对象)之间的关系
其一是关联关系(说白了有一点关系,但不怎么紧密)
一个方法的参数是你这个类的对象
例如:学院--里有--(教授--教--研究生)
教授这个类里有教这个方法,方法的参数是研究生,刚好是研究生这个类的对象
其二是继承关系(一般和特殊)
什么什么是什么什么,只要能够说得通
运动员
游泳运动员、球类运动员、射击运动员
足球运动员、篮球运动员、排球运动员
是不是一个类只能从一个类中继承,
如金丝猴是一种动物,金丝猴继承于动物这个类
应该收到保护的东西,这个一个类,其实金丝猴也是一种受保护的东西
在我们现实生活中,一个类完完全全可以从不同的类中继承,所以c++存在多重继承
多重继承会有一些麻烦事,如果说你的两个父类成员变量有重名的问题,比较麻烦
其三是聚合关系(整体和部分)
球队(队长、队员)
person(limb、head、body)这个是密不可分的,是聚合
其四是实现关系(讲了接口再讲其实比较合适):
比如刚才的例子,我想去新疆,我要开车去,
对于任何一个车来说应该具有一个方法,叫GO
比如说车是一个类,车不必实现这个方法
大卡车、小轿车、自行车也从车继承
大卡车有大卡车的方法
小轿车有小轿车的方法
作为面向对象的思维来说当你考虑这个问题的时候
你首先应考虑作为这个问题来说这个类应该有哪些个类哪些个对象
再来考虑这些个类这些个对象应该具有哪些个属性和方法
最后再考虑这些类和类之间具有怎样的关系
对象时核心,在JAVA程序中“万物皆对象”
如果你要在java中
函数说的也是方法 方法=函数
属性也是成员变量 属性=成员变量
面向对象更加容易使我们达到这些年年来苦苦追求的境界
Rensable可重用性
Extensibility可扩展性
面向组件的编程
成员变量和局部变量的重要区别
定义成员变量的时候如果不对其进行初始化,java默认对其初始化
byte 0
short 0
int 0
long oL
char '\u0000'
float 0.0F
double 0.0D
boolean false
所有引用类型 null
这些其实不用记,忘了的时候可以试验一下
成员变量整个类体
引用:
引用在java语言中
除了java基础类型以外的声明
基础类型占一个内存
引用类型占两块内存
我们说java中没有指针,其实java中到处都是指针
我们说引用其实就是一个指针
当我们定义了一个类的对象之后,这个对象可能在堆内存(存放所有new出来的东西)
,也可能存在其它内存中,当我们只有去new这个对象之后,我们才能
去真正使用这个对象,堆内存中才有了一大块狗这个对象的内存
我们所调用这个对象的一些方法,其实是通过我们之前的那个引用
,然后这个引用指向堆内存中的狗的这个内存
类是一个静态的概念,代码区
对象是new出来的,位于堆内存中(堆内存是动态分配内存的)
javac是编译过程,意思是将它翻译过来
java是运行过程,只有在运行过程才知道这个内存有多大
这个东西如果不用了就是垃圾,等待垃圾回收机制回收内存
类的每个成员变量在不同的对象中都有不同的值(除了静态变量)
而方法只有一份,执行的时候才占内存
方法不调用就是一堆代码
对象的创建和使用:
必须使用new关键字来创建对象
使用对象(引用).成员变量或引用对象的成员变量
使用对象(引用).方法(参数列表)来调用对象的方法
(具体方法在执行时其实是针对自己的这个属性来执行的
例如说狗这个类,腿长和腿短是两个对象的同一个属性,在抓老鼠的
这个方法中,腿长的跑的就快,腿短的跑的就慢
)
同一个类的每个对象有不同的成员变量存储空间
同一个类的每个对象共享该类的方法
其实严格的讲c1和c2是两个引用
c1和c2是两个局部变量
stack存放局部变量
data segment放金泰变量和字符串常量
code segment代码区,存放代码用的
heap动态申请内存用的,所有new出来的东西
不管是java、c#、c++,不管其它任何编程语言,内存的布局都是一样
构造方法(构造函数)
方法名和类名相同,不能有任何返回值
和new 一起使用,所以new的时候,就一块把这个方法给调用了
通过内存来分析构造方法
public class People{
int id;
int age;
People( int _id,int _age){
id=_id;
age=_age;
}
public static void main(String[] args){
People p1=new People(1,25);
People p2=new People(2,32);
}
}
构造方法的引用是一个局部变量,在栈内存(stack)中存放这个局部变量,
其实构造方法中的参数也是局部变量,在栈内存中也会有位置存放这个
局部变量,在栈内存p1这个引用中_id 的值是1,_age的值是25,在p2这个
引用中_id 的值是2,_age的值是32,
然后当你new 了以后,会在heap这个内存块中弄两块位置,一个是存放p1这个对象
,其中p1这个对象中有两个属性,id和age,我们可以把,其中id的值已经被赋予了
1,age的值已经被赋予了25这个值
然后在栈内存中的_id和_age这两个属性也就不存在了,为了给其它的
变量或是方法来占用,可以通过栈内存中的p1这个引用来指向
heap内存中的p1对象
p2也是一样的
如果一个方法中如果我们没有显式的写构造方法,系统会默认为我们写一个零参
的构造方法
如果我们显式的写出这个方法的话,系统就不会帮我们写那个零参的构
本文介绍了面向对象编程的基本概念,包括类、对象、继承、多态等,并对比了面向过程的编程方式,阐述了面向对象编程的优点,如提高代码的可重用性和可扩展性。
621

被折叠的 条评论
为什么被折叠?



