面向对象进阶
Posted 果子儿酱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象进阶相关的知识,希望对你有一定的参考价值。
成员变量也称为属性。
Java中的成员变量分为类属性和实例属性两种,定义属性时没有static修饰符修饰的就是实例属性。其中,类属性从类被加载开始存在,直到系统完全销毁该类,类属性的作用域与该类的生命周期相同。而实例属性则从类的实例被创建起开始存在,直到系统销毁该实例,实例属性的作用域与其对应的实例的生命周期相同。
1.成员 变量的使用
成员变量在使用之前,需要先进行声明,声明成员变量是在类的内部、方法的外部定义的变量,成员变量分为实例变量和类变量。实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个类范围。
成员变量的声明要给出变量名、变量类型以及其他特性,其语法如下:
[<修饰符>] [static] [inal]< 变量类型><变量名>
(1) stati:表示个类的成员变量,即静态成员变量。
(2) final: 表示是一个常量。
在该类中定义mm和0实阅变量,验证实阴变量的作用城。
示例
public class Hero { String name; int age;
//英雄名字/1英雄年龄
public static void main(String[] args){
//创建英雄对象hero1
Hero hero1 = new Hero();
hero1.name="德鲁伊";
//为hero1的实例属性name赋值
hero1.age=45;
//为hero1的实例属性age赋值
//创建英雄对象hero2
Hero hero2 = new Hero();
System. out.printIn("英雄hero1的名字:" + hero1.name+"\\t"+"年龄:" +hero1.age); System.out.println("英雄hero2的名字:" + hero2.name+"\\t"+"年龄:" +hero2.age);
上述程序演示的是实例成员变量的使用。在Java中还有一类成员变量, 称为类变量或静态成员变量,类成员变量是使用static关键字修饰的变量,一个类成员变量由该类的所有实例对象共享,而不是任何一个类实例的变量。在编译时,类成员变量保存在类声明的存储单元中,同时在访问类成员变量时,无须事先实例化其所在的类,对于类的任何一个具体对象而言,类成员变量被保存在该类内存区的公共存储单元中,而不是保存在某个对象的内存区域中,因此任何一个类对象在访问它时都可获得相同的值。
3.隐藏和封装
4.封装的概念
现实生活中,封装的例子随处可见,如药店出售的胶囊类
3. 我们只能看到胶囊,却看不到胶囊的材料和生产
工序;邮递的包裹,我们只能看到包裹外部的包装,却看不到里面的电视机可以收看电视节目,却看不到电视机的组装技术等,这些都是现实生活中的封装。
封装是面向对象的三大特性之一, 它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改,如人的年龄属性只能随岁月的流逝而增加,通常不能随意修改人的年龄。对一个类或对象实现良好的封装,可以实现以下目的:
(1)隐藏类的实现细节。
(2)让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访问。
(3)可进行数据检查,从而有利于保证对象信息的完整性。
(4)便于修改,提高代码的可维护性。
实现良好的封装,需要从以下两个方面考虑:
(1)隐藏对象的属性和实现细节,不允许外部直接访问。
(2)暴露出方法,让方法控制对这些属性进行安全的访问和操作。
因时韧技实际上有两个方面的含义:隐藏该隐藏的,暴营该暴露的。这两个方面都需要通过使用Jo提供的访问控制符来实现。
程序中的封装具体操作见示例。
public class Hero {
11使用private修饰属性,隐藏这些属性 private String name;
private int age;
.// 提供方法操作name属性
public void setName(String name) {
//执行合理校验,要求用户名必须在2 ~ 6之间 if(name.length()> 6l|name.length()<2){
System.out.printIn(" 您输入的名字不符合要求");return;
}else{
this.name = name;
public String getName() {
return name;
/1提供方法操作age属性
public void setAge(int age) {
//执行合理校验,要求用户年龄必须在0 ~ 100之间 if(age>100 II age<0}{
System.out.printin("您输入的年龄不合法);return;
}else{
this.age = age;
public int getAge() { return age;
以上是关于面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章