• 第五课:类的封装性 M


      观察下面的代码:

    class Person{
    	String name ;
    	int age ;
    	public void tell(){
    		System.out.println("姓名:" + name +",年龄:" + age) ;
    	}
    }
    public class SimpleDemo{
    	public static void main(String args[]){
    		Person per = new Person() ;
    		per.name = "张三" ;
    		per.age = -30 ;
    		per.tell() ;
    	}
    }
    

      如果现在的年龄为负数,并不会影响程序的执行。但是从实际的生活角度来讲,没有一个人的年龄是-30岁。所以这样的数据就不应该设置上去。

      因为现在类中的所有操作都是对外部可见的,可以直接访问的。此时就可以通过风合租昂性来解决此问题,在Java中封装性有很多的体现,但是最简单的体现就是加入“private”关键字。

        封装属性:private 数据类型 属性名称 = 默认值 ;

        封装方法:private 返回值类型|void 方法名称(参数列表) 

      那么下面按照此操作将类中的属性进行封装:

        private String name ;

        private int age ;

      这是编译会发生错误,提示name和age属性是使用private关键字声明的,所以无法在外部直接访问。证明现在的属性是安全的,可以自己保护了。

      但是,现在代码是安全了,但是无法操作,那么该怎么办呢?

      所以,给出一个重要的概念:只要属性就必须进行封装,被封装的属性通过setter及getter方法设置和取得,例如:name属性,setter:setName(),getter:getName()

    class Person{
    	private String name ;
    	private int age ;
    	public void tell(){
    		System.out.println("姓名:" + name +",年龄:" + age) ;
    	}
    	public void setName(String n){
    		name = n ;
    	}
    	public void setAge(int a){
    		age = a ;
    	}
    	public String getName(){
    		return name ;
    	}
    	public int getAge(){
    		return age ;
    	}
    }
    public class SimpleDemo{
    	public static void main(String args[]){
    		Person per = new Person() ;
    		per.setName("张三") ;
    		per.setAge(3) ;
    		per.tell() ;
    	}
    }
    

      此时,已经可以访问类中的name和age属性,是通过间接的方式完成,但是此时并没有对输入的内容进行检查。

    public void setAge(int a){
    		if(a>=0&&a<100){
    		age = a ;
    		}
    	}
    

      在访问本类中其他方法时,为了保证方法是本类中定义的,可以在方法前加上this关键字:this.方法(),就是调用本类的方法。

      最终代码:

    class Person{
    	private String name ;
    	private int age ;
    	public void tell(){
    		System.out.println("姓名:" + this.getName() +",年龄:" + this.getAge()) ;
    	}
    	public void setName(String n){
    		name = n ;
    	}
    	public void setAge(int a){
    		if(a>=0&&a<100){
    		age = a ;
    		}
    	}
    	public String getName(){
    		return name ;
    	}
    	public int getAge(){
    		return age ;
    	}
    }
    public class SimpleDemo{
    	public static void main(String args[]){
    		Person per = new Person() ;
    		per.setName("张三") ;
    		per.setAge(30) ;
    		per.tell() ;
    	}
    }
    

    【2011-11-28】

  • 相关阅读:
    Ubuntu 18.04 初始化(server版本 )
    named主从环境部署
    CentOS 源码安装svn
    端口状态
    进程状态
    top命令详解
    gitlab部署
    day16
    day15
    day14
  • 原文地址:https://www.cnblogs.com/chuanstone/p/2304548.html
Copyright © 2020-2023  润新知