美文网首页
封装与隐藏--java学习第六天

封装与隐藏--java学习第六天

作者: Girl_endless | 来源:发表于2015-11-30 10:35 被阅读65次

    在创建类的时候,类名需要单词首字母大写,方法名需要首字母小写,其他单词首字母大写,若方法名只有一个单词时,首字母大写。

    在UML图中,-是私有的,+是公共的,#是protected。

    一:面向对象特征之一:封装与隐藏

    问题:当创建了类的对象了以后,如果直接通过“对象.属性”的方式对相应的对象属性进行赋值的话,可能会出现不满足实际情况的意外(例如动物的legs只能是偶数个,不能奇数),所以我们考虑不让对象来直接作用属性(int legs;  a.legs= 3),而是通过“对象.方法”的形式,来控制对象对属性的访问(重新定义一个方法,其中对legs进行限制)。实际情况中,对属性的要求就可以通过方法来实现。

    但是当两种调用方式都可行的时候,就需要对“对象.属性”的方式进行限制,这里进行private进行限制,只能在该类被访问。

    解决的方法:(封装性的思想)1.将类的属性私有化,2.提供公共的 方法(setter & getter)来实现调用。

    二:权限修饰符:public  private   缺省  protected

    注:权限从大到小的排列:public  protected  缺省 private

          修饰类的权限:public  缺省(在调用的时候,是用三角形表示缺省,用圆圈表示public) 

    1.对于属性、方法和构造器的访问:

    2.对于class的权限修饰只可以用public和default(缺省):

    public类可以在任意地方被访问。

    default类只可以被同一个包内部的类访问。

    public类除了可以被本包内被访问调用外,若该类需要在该包以外被继承时,则需要导入其所在的包,才能够被进行调用。

    一个小例子:

    public class TestPerson {        

        public static void main(String[] args) {

            Person p = new Person();

            p.setAge(150);

            System.out.println(p.getAge());

         }

    }

        class Person{

            private int age;

            public void setAge(int i){

                if(i>=0 && i <=130){

                     age = i;

                }else {

                      System.out.println("输入的年龄有误");

                      //throw new RuntimeException("shuru de shuju youwu");

                 }

              }

              public int getAge(){

                  return age;

             }

    }

    这种情况下,当输入不在0-130范围内时,会输出什么?

    答:这种情况下会输出:输入的年龄有误

                                 0

    若抛出那句异常,则不会再有0输出。


    类的第三个成员:构造器(constructor 构造方法)

    constructor:建造者

    构造器的作用:1,创建对象 2,给创建的对象的属性赋值,通过构造器的形参传递

    1,设计类时,若不显示声明类的构造器的话,程序会默认提供一个空参的构造器。

    public Person(){

    }

    2,一旦显示的定义了类的构造器,那么默认的构造器就不再提供了。若需要无参数的构造器时,则需要重新写一个空的够早方法。

    Person p = new Person();平时用的都是不带参数的构造方法,系统自动提供,

    Person p = new Person("5");这个是带参数的构造方法,

    public Person(int a){    

    ]

    3,如果声明类的构造器。格式:权限修饰符  类名(形参){  } ------------无返回值

    4,类的多个构造器之间构成重载

    二,类对象的属性赋值的先后顺序:类对象指的是new Person()

    1,属性的默认初始(指定义了不带参数的构造函数以后,系统一旦创建该对象,便自动赋值指没有默认值的属性);

    public Person(){                       private String name;(默认初始化)

    name = null;                           private int age = 1;(显示初始化)

    age = 34;

    }//该构造函数不带参数

    2,属性的显示初始化(指新建类中属性带有赋值)

    3,通过构造器给属性初始化(带参数的构造器)

    4,通过“对象.方法”给属性赋值

    所以最终决定该属性值是多少时,应该从4到1往前看,因为后面的会将前面的值覆盖。所以构造器的赋值优于属性默认和显示的赋值。

    相关文章

      网友评论

          本文标题:封装与隐藏--java学习第六天

          本文链接:https://www.haomeiwen.com/subject/yjxjhttx.html