--------------android培训、java培训、期待与您交流! --------------
面向对象概述(理解面向对象,面向对象的特点,面向对象的特征,面向对象举例,面向对象开发和设计)
面向对象【类】(类与对象的关系,匿名对象的应用,成员变量和成员函数,局部变量,this、static关键字)
面向对象【类的构造】(构造函数,构造代码块)
一、面向对象概述
1、理解面向对象
2、面向对象的特点
3、面向对象的特征
(1)封装(encapsulation)
将对象的属性和行为进行封装,其载体为类,类中的东西不需要被使用的人知道,也就是对用户隐藏内部细节,只需要对外提供使用就可以,这就是封装的思想。
封装原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,对外提供访问方法。
例子:电脑主机。其内部的硬件细节不需要被用户知道,只向外提供借口的使用方法,也就是说电脑主机内部对用户是透明的,用户直接可以拿来用。
函数就是Java语言中最小的封装体。
封装的好处:提高安全性、提高重用性、将变化隔离、便于使用
private:私有权限修饰符,用于修饰类中成员;私有内容只在本类中有效。
注意:私有仅仅是封装的一种表现形式。
(2)继承(inheritance)
类与类之间有关系,如鸽子和鸟,类之间的这种关系叫做关联。当处理一个问题时,可以将一些有用的类保留下来,在遇到同样问题时复用。若实现一个信鸽的功能,信鸽是鸽子,鸽子属于鸟,我们可以添加信鸽特有的属性和行为,由于鸽子保留了鸟的属性和行为,这样我们就可以把鸟类拿来复用,让信鸽继承鸟,这就节省了大量的代码量,同时这也是继承的基本思想。
4、面向对象举例
(1)去买电脑,我不了解买电脑的具体方法,而毕老师会,则我把毕老师作为对象,调用他的买电脑的方法,即可实现买电脑,这便是一个面向对象的例子。
public class buypc {
public static void main(String[] args) {
//建立毕老师的对象,并调用对象的方法
bilaoshi b=new bilaoshi();
b.chaxun();
b.zixun();
b.kanjia();
System.out.println("付钱,购买电脑成功!");
}
}
class bilaoshi{
void chaxun(){
System.out.println("毕老师查询电脑资料");
}
void zixun(){
System.out.println("毕老师咨询电脑情况");
}
void kanjia(){
System.out.println("毕老师与商家砍价");
}
}
(2)去饭店吃饭,顾客不需要了解其中的饭的做法,只需要调用对象的功能实现即可。
public class eat {
public static void main(String[] args) {
hotel h=new hotel();
h.eat();
}
}
class hotel{
void eat(){
System.out.println("顾客到达饭店,叫服务员点菜");
waiter w=new waiter();
w.order();
}
}
class waiter{
void order(){
System.out.println("服务员写菜单,将菜单递给厨师");
cooker c=new cooker();
c.cook();
}
void take(){
System.out.println("服务员将菜端上桌,顾客开始吃饭");
}
}
class cooker{
void cook(){
System.out.println("厨师收到菜单,开始做饭");
waiter w=new waiter();
w.take();
}
}
5、面向对象开发和设计
开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系。
二、面向对象(类)
1、类与对象的关系
(1)类是同一类事物的统称,将现实世界中的一个事物抽象为对象,类就是这类对象的统称。
例如:人类、植物类、鸟类。
(2)对象就是符合某个类的定义所产生出来的实例,可以说类是事物的抽象称呼,而对象则是事物的对应实体。
例如:人类是人这个事物的抽象称呼,张三这个对象则是人这个事物的对应实体。
(3)类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法,即类是封装对象的属性和行为的载体。
(4)java中,用来描述事物的就是类(class),对象则是类在堆内存中用new关键字建立的实体。
这里汽车图纸可以看作是类,汽车则是汽车图纸这个类在堆内存里建造的实体。
public class CarDemo{
public static void main(String[] args) {
Car c=new Car();//对象c就是CarDemo类在堆内存中建立的实体。
c.run();
}
}
class Car{
String color="黑色";
int num=4;
void run(){
System.out.println(color+"汽车..."+num+"个轮胎行驶");
}
}
2、匿名对象的应用
(1)匿名对象是对象的简化形式
(2)匿名对象两种使用情况
当对对象方法仅进行一次调用的时
匿名对象可以作为实际参数进行传递
(3)若对一个对象进行多个成员调用,则这个对象不能为匿名对象,必须要有名字。
public class CarDemo {
public static void main(String[] args) {
Car c=new Car();
//非匿名对象可以多次调用。
c.setColor("银色");
c.setNum(6);
c.run();
new Car().run();//当对象仅一次调用可以用匿名对象
}
}
class Car{
String color="黑色";
int num=4;
void run(){
System.out.println(color+"汽车..."+num+"个轮胎行驶");
}
void setColor(String color){
this.color=color;
}
void setNum(int num){
this.num=num;
}
}
3、成员变量和成员函数
事物属性对应类中变量,事物行为对应类中函数,事物的属性和行为共同成为类的成员变量和成员函数
(1)成员变量是对象的属性。
成员变量定义在类中,在整个类中都可以被访问。
成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
成员变量有默认初始化值。
(2)成员函数是对象的行为。
成员函数可以有参数,这个参数可以是对象,也可以是基本数据类型的变量。
成员函数可以有返回值也可以没有,返回值可以是计算结果也可以使其他想要的数值和对象。
在成员函数中可以调用其他成员函数和类成员变量。
4、局部变量
(1)局部变量只定义在局部范围内,如:函数内,语句内等。
(2)局部变量存在于栈内存中。
(3)作用的范围结束,变量空间会自动释放。
(4)局部变量没有默认初始化值。
5、this关键字
this关键字
表面this看上去是用于区分成员变量和局部变量的同名情况。
特点:this代表其所在函数所属对象的引用。即this代表本类对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。
this应用:
什么时候使用this关键字呢?
当函数内需要用到调用该函数的对象时,就用this来表示这个对象。即但凡本类功能内部使用到了本类对象,就都用this表示。
需求:汽车类的构造函数中运用this来赋值。
class Car{
private String color="黑色";
private String name="奔驰";
private int num=4;
Car(){
//System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(int num){
this.num=num;//左边this.num中的num是类的成员变量,this代表该类对象的引用,右边num是该函数的局部变量。
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(String name,String color){
this.name=name;
this.color=color;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setColor(String color){
this.color=color;
}
public String getColor(){
return color;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
public void run(){
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public static void main(String[] args) {
Car a=new Car();
Car b=new Car(6);
Car c=new Car("宝马", "银色");
c.setName("雪弗莱");
c.setColor("红色");
c.run();
}
}
this语句:用于构造函数间互相调用。this();
this语句只能定义在构造函数的第一行。因为初始化要先执行。
class Person{
private String name;
private int age;
Person(String name){
this.name = name;
}
Person(String name,int age){
this(name);//this语句调用了Person(name)构造函数
this.age = age;
}
}
class PersonDemo{
public static void main(String[] arge){
Person p = new Person("wangwu",20);
}
}
三、面向对象(类的构造)
1、构造函数
什么时候定义构造函数?
当分析事物时,该事物一存在就具备一些特性或行为,则将这些内容定义在构造函数中。
构造函数的时候如果需要有未知内容参与运算,那么就定义参数,否则不定义参数。
特点:
(1)函数名与类名相同
(2)不用定义返回值类型
(3)不可以写return语句
作用:给对象进行初始化。
注意:
(1).默认构造函数的特点。当类中没有定义构造函数时,系统会给其定义一个空参数的构造函数。当自己定义了构造函数后,系统的默认构造函数就没有了。
(2)多个构造函数是以重载的形式存在的。
(3)构造函数是对象一建立就运行,给对象初始化;而一般函数是对象调用才执行,给对象添加对象所具备的功能。一个对象建立,构造函数只运行一次,而一般函数可以多次调用。
2、构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数区别:
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
3、构造函数和构造代码块示例
class Car{
private String color="黑色";
private String name="奔驰";
private int num=4;
//构造代码块,定义的是不同对象共性的初始化内容。
{
System.out.println("生产汽车");
}
//构造函数
Car(int num){
this.num=num;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
Car(String name,String color){
this.name=name;
this.color=color;
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setColor(String color){
this.color=color;
}
public String getColor(){
return color;
}
public void setNum(int num){
this.num=num;
}
public int getNum(){
return num;
}
public void run(){
System.out.println("汽车名:"+name+" 汽车颜色:"+color+" 汽车轮胎数:"+num);
}
public static void main(String[] args) {
Car a=new Car(6);
Car b=new Car("宝马", "银色");
b.setName("雪弗莱");
b.setColor("红色");
b.run();
}
}