面向对象

来源:互联网 发布:软件学报官网 编辑:程序博客网 时间:2024/04/29 18:36


3面向对象:
3.11理解面向对象
//相对面向过程而言,面向过程是强调功能行为,吧大象装冰箱啊,打开,装进去,关闭
//面向对象将功能交给(冰箱)对象,强调的是具备了这三个动作的冰箱这个对象。你只要找到冰箱就行了。
//如果想用那三个功能的话,就可以用
冰箱.打开//强调的冰箱,而不是 打开冰箱
冰箱.装进去
冰箱.关闭

但是面向对象是基于面向过程的。
//万物皆对象,这话nB啊

名词提炼法:寻找有几个对象
eg:人开门,人。门

//面向对象有三个特征:封装。继承。多态。
//以后的开发,就是找对象使用,没有对象就创建一个对象。
//找对象,使用对象,维护对象的关系、
 
 /*
 类和对象的关系


类,就是对现实生活中事物的描述。
对象,就是这类事物中,事实存在的个体。
映射到java中,描述就是class定义的类,
具体对象就是对应java在堆内存用new建立的实体,
 */

//需求,描述汽车,描述事物其实就是描述事物的属性和行为
//属性对应的是类中的变量,行为对应着类中的函数(方法)
//其实定义类,就是在描述事物,就是在定义属性和行为,属性和行为共同成为类中的成员。{成员变量,成员方法}

class Car// 在这个类中,并没有建立主函数,因为:主函数是保证一个类能运行的保障,但是这个类并不需要运行只是起到描述作用,就可以不用主函数,想要他运行,好办,new一个对象,让对象来运行
{
 //描述颜色
 String color ="红色";
 //描述轮胎数啊
 int num =4;
 //运行行为
 void run()
 {
  System.out.peintln(color+"  "+num);
 }
}
class CarDemo
{
 public static voied main(String[] args)
 //图纸你已经弄完了,是不是该生产汽车了
 //其实就是在堆内存中生产一个实体、
 Car c =new Car();//c是什么类型的啊?答,是这个Car类型的。
   //c就是一个类类型变量,数据类型除了那8种基本数据类型之外
   //还有引用数据类型,除了以前讲过的数组类型之外,
   //记住类类型变量指向对象。
 //需求,将已经有的车,改成蓝色,
 //在java中指挥方式是 : 对象名.对象成员
 c.color= "blue";
 
 c.run();

}
总结;这里定义的num和color并没有定义在函数中,而是定义在类中,这样的变量叫成员变量
定义在函数中的变量叫做局部变量
区别:1成员变量作用于整个类中,局部变量只能作用于函数或者语句中
 2在内存中的位置,成员变量储存在堆内存中,随着对象的存在而存在,局部变量储存在栈内存中。 
 3成员变量有默认值


——————————————————————————————————————————————————————————————————————————————
3.26匿名对象:是对象的简化形式。new Car();
Car c =new Car();跟 new Car();意思差不多
使用方法1:
当对对象的方法(只能是方法,匿名对象调用变量是没用的,new Car().num=4这句话是废物,只不多在堆内存中产生了垃圾,给这个车轮子变成4个,没名字你知道是给哪个车改轮子吗,所以是废物)
调用一次的时候,可以用匿名对象来完成,这样写简单。如果对一个对象中多个成员进行调用,就必须给这个对象起个名字
//罗嗦几句,简化的都会有局限性,eg: ? : ,三元运算符只能用于有结果的判断,不想if那么随便。
使用方法2:可以将匿名对象作为实际参数进行传递
//需求,汽车修配厂,对汽车改成三个轮胎,黑色
public static void show (Car c)
{
 c.num =3;
 c,coloe= "black";
 c.run();
}
主函数
{
 Car c= new Car();
 show(c);//主函数中这两句话就等同于show(new Car())
}
_______________________________________________________________________
3.3封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式
 意思是,在我们使用对象时,不必知道对象内部是如何完成功能操作的,我们只要指挥他去做,我们只要知道结果就行了。

好处:1隔离了变化,别人改个cpu,加个内存,加个硬盘,跟我没关系,我还能用
      2便于使用
      3,便于重用性
      4,提高安全性,我不知道细节,我就不会去乱改动,就提高了安全性
函数就是代码中最小的封装体。类也是封装体。包也是封装,框架也是封装。

/*
private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效
将age私有化之后,外边的类就不能再访问了,但是在personal类中应该提供一种方式来访问它.
注意,私有仅仅是封装的一种表现形式,别出去丢人去
之所以提供对外提供访问方式,就是因为可以再访问方式中加入逻辑判断,提高代码的健壮性。
*/

class Person
{
 private int age;
 public void setAge(int a);//书写规范,书写方法名字的时候如果有多个字母组成,那么第一个单词字母小写,以后的单词第一个字母大写
 [      if (a>&&a<130)
  age=a://之所以提供对外提供访问方式,就是因为可以再访问方式中加入逻辑判断,提高代码的健壮性。
  else
  System......("年龄出错")
 ]
 public int getAge()
 {
  retun age;
 }
 void speak()
 {
  Ststem.out.peintln("age"+age);
 }
}

class PerrsonDemo
{
 public static void main[Steing[] args]
 {
  Person p =new person();
  p.setAge(-20);
  //p.age =20;//他不能访问了,因为age是private修饰的
  p.speak();
 }
}
___________________________________________________________________________________________

3.4 构造函数
特点1,格式固定,函数名和类名相同
2 不需要定义返回值类型,不可以写return
/*
构造函数:对象一建立就会调用与之对应的构造函数
构造函数的作用,可以给对象初始化
构造函数小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数
eg:Person(){}
但是如果你自己定义了一个构造函数,系统就不会再定义了。
*/
class Person
{
 private String name:
 private int age ;
 Person();//构造函数
 {
 System,out.println("a" +name age); 
 }
 Person(String n);//重载
 {
 System,out.println("b" +name age); 
 }
 Person(String n,int a);//重载
 {
 System,out.println("c" +name age); 
 }
 
}
class PersonDemo2
{
 public static void main(String[] args)
 {
  Person p1 =new Person();
  Person p2 =new Person(张三);
  Person p3 =new Person(张三,14);
 }
}

//构造函数和一般方法的区别:
1构造函数一建立,就会给对象初始化,而一般方法,是对象调用,才给对象添加应该具备的功能
2一个对象建立,构造函数只运行一次,而一般方法可以被对象调用多次
什么时候写构造函数呢,?
当分析事物时,这事物存在具备以下特性和行为时,将这些内容定义在构造函数中,如果有未知数参与运算,
就定义在构造函数中,没有就空。

——————————————————————————————————————————————
 /*
 构造代码块,
 作用:给对象初始化,对象一建立就运行了,而且优先于构造函数执行
 和构造函数的区别:构造代码块是对所有对象都统一初始化,构造函数是对对应的对象初始化。
 */
//这就是构造代码块,没函数名
{
System.out,printlin(fafawf );
}

——————————————————————————————————————————————————
this关键字,看上去是用于区分局部变量和成员变量同名的情况下。用法二就是同名函数间互相调用
一般函数是不能调用构造函数的,this只能用于构造函数间
this为什么可以解决这个问题呢?
this到底代表着什么呢?

this:就代表本类的对象,如果有好几个对象,到底代表哪个呢?
this:代表它所在函数所属对象的引用
简单说,哪个对象在调用this所在的函数,this就代表那个对象

this的应用:当定义函数功能是,该函数内部要用到调用的函数对象时,这时用this代表这个对象,因为下面你还没new一个对象呢啊,不知道这个对象的名字啊,所以用
this代替啊
。但凡本类功能使用了本类对象,都用this表示,因为那时候还没定义对象呢。 、

构造函数间调用只能用this语句,记住这句话就可以了。而且this语句只能放在构造函数的第一行,因为初始化动作要先执行,
如果初始化动作还有初始化动作,那么就先执行那个更细节的初始化动作。

 



原创粉丝点击