Java-面向对象(基础篇)--面向对象基础

面向对象(基础篇)
一. 面向对象的基本概念
面向对象是针对用户的要求进行分析,将分析的结果设计成图纸,然后将一切的准备工作全部处理完之后再分块制作,最后将各个部分组装在一起。
对于面向对象的程序设计用封装性、继承性、多态性3个主要特性。
1. 封装性
封装是面向对象的方法所应遵循的一个重要原则,有两个含义。一是指把对象的静态属性和动态方法(行为)看成一个不可分的整体,将两者“封装”在一个不可分割的独立单位(即对象)中;另一种含义是指“信息隐蔽”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界知道,但是不允许修改,有的属性或行为,不允许外界知道,等。
封装机制在程序设计中表现为,把描述对象属性的变量及实现对象功能的方法合在一起,定义为一个程序单位,并保证外界不能任意更改其内部的属性值,也不能任意调动其内部的功能方法。封闭机制的另一个特点是,为封装在一个整体内的变量和方法规定不同级别的“可见性”或访问权限。
2. 继承性
继承是面向对象方法中的重要概念,并且是提高软件开发效率的重要手段。
首先拥有反应事物一般特性的类,然后在其基础上派生出反映特殊事物的类。在Java程序设计中,已有类可以是Java开发环境提供的最基本的类。用户开发的程序类是继承这些已有的类。被继承的类成为父类或超类,而经继承产生的类称为子类或派生类。根据继承机制,派生类继承超类的所有成员,并相应的增加了自己的一些新成员。Java中只允许单继承,即一个子类只能继承一个父类。而Java语言通过interface(接口)的方式来弥补Java不支持多继承而带来的子类不能享用多个子类父类成员的缺点。
3. 多态性
多态性是面向对象的另一重要特性。多态是允许程序中出现重名现象。Java语言中含有方法测重载与对象多态两种形式的多态。
方法的重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。
对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同,完成的功能也不同。
二. 类与对象
1. 类与对象的关系
在面向对象中,类和对象是最基本、最重要的组成单元。类实际上表示一个客观世界某群体的一些基本特征抽象。对象就是一个个具体的东西。例如:
*人类(类):定义出了一个基本的模板,代表着一个共性
张三、王二、、、(对象):没一个具体的人,根据不同给予不同的姓名等,代表一个特性。*
2. 类的定义
从类的概念中可以了解,类是由属性和方法组成。属性中定义的是类需要的一个个具体信息,实际上一个属性就是一个变量,而方法是一些操作的行为,但是在程序设计中,定义类也是要按照具体的语句要求完成的。类的定义如下:
【类的定义】

class 类名称{
        数据类型 属性;
        ...//声明成员变量
        }
public 返回值类型 方法名称(参数1,参数2,。。。。){
            程序语句;
            [return 表达式;]//定义方法的内容
}

【Person类】

class Person{
    // 人中有姓名和年龄两个属性
    String name ;       // 表示姓名
    int age ;           // 表示年龄
    public void tell(){
        System.out.println("姓名:" + name + ";年龄:" + age) ;
    }
};

Person类定义了name和age两个属性,然后定义了一个方法tell,此方法打印两个属性的内容。
类中定义方法的补充说明:此处的方法与之前的方法定义有区别,并没有加上static关键字,这是因为此时定义的方法将要由对象调用,而不像之前那样与主方法定义在一个类中且由主方法直接调用。
3. 对象创建及使用
在上面创建了一个类,要想使用必须有对象。
【对象的创建】

类名 对象名称=null;
对象名称=new 类名();

或者

类名 对象名称=new 类名();
class Person{
    // 人中有姓名和年龄两个属性
    String name ;       // 表示姓名
    int age ;           // 表示年龄
    public void tell(){
        System.out.println("姓名:" + name + ";年龄:" + age) ;
    }
};
public class ClassDemo02{
    public static void main(String args[]){
        Person per = new Person() ;
    }
};

以上程序在主方法中实例化了一个person对象,对象名称为per。与之前数组的创建过程相似,对象的实例化也是要划分堆、栈内存的,具体过程如下:
这里写图片描述

从图中可以看出所有的对象名称都在栈内存中保存,而对象的具体内容保存在对应的堆内存中,必须使用关键字new才能开辟堆内存空间,在堆内存空间中保存着对象的属性信息,此时,因为per对象刚刚被实例化玩,所以对象中的属性内容都是默认值,字符出的默认值为null,整数的默认值是0.
    栈中存放的是堆空间的地址。

    如果要使用对象访问类中的某个属性或方法可以使用如下语句:
    访问属性:对象名.属性名
    访问方法:对象名.方法名()
    【tell方法输出】
class Person{
    String name ;       // 声明姓名属性
    int age ;           // 声明年龄属性
    public void tell(){ // 取得信息
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class ClassDemo03{
    public static void main(String args[]){
        Person per = null ;     // 声明对象
        //per = new Person() ;  // 实例化对象
        per.name = "张三" ;       // 为姓名赋值
        per.age = 30 ;          // 为年龄赋值
        per.tell() ;            // 调用方法,打印信息
    }
};

程序运行结果:

姓名:张三,年龄:30

对象使用前必须实例化。
4. 创建多个对象
前面已经介绍了一个对象的创建过程,那么按照此格式可以同时创建多个对象,每个对象都用自己的栈、堆空间。
【创建两个对象】

class Person{
    String name ;       // 声明姓名属性
    int age ;           // 声明年龄属性
    public void tell(){ // 取得信息
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class ClassDemo05{
    public static void main(String args[]){
        Person per1 = null ;        // 声明per1对象
        Person per2 = null ;        // 声明per2对象
        per1 = new Person() ;       // 只实例化per1一个对象
        per2 = per1 ;               // 把per1的堆内存空间使用权给per2
        per1.name = "张三" ;      // 设置per1中的name属性内容
        per1.age = 30 ;             // 设置per1中的age属性内容
        // 设置per2对象的内容,实际上就是设置per1对象的内容
        per2.age = 33 ;             // 设置per2中的age属性内容
        System.out.print("per1对象中的内容 --> ") ;
        per1.tell() ;               // 调用类中的方法
        System.out.print("per2对象中的内容 --> ") ;
        per2.tell() ;               // 调用类中的方法
    }
};

程序运行的结果为:

per1对象中的内容 --> 姓名:张三,年龄:33
per2对象中的内容 --> 姓名:张三,年龄:33

由程序运行结果可以发现,程序分别实例化了两个Person对象,每当关键字new出现的时候必定开辟了新的堆内存空间,那么per1和per2分别指向不同的各自的堆内存空间。需要注意的是,一个栈内存空间只能指向一个堆内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aotulive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值