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

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

在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往前看,因为后面的会将前面的值覆盖。所以构造器的赋值优于属性默认和显示的赋值。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,787评论 1 6
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,936评论 0 62
  • 东风起,雨如烟。阳光把土地翻弄的松软无比,一脚踩上去都能感到世界的温暖。当耕牛发出第一声“哞……”喊醒春天,喊醒开...
    营州布衣阅读 1,807评论 0 5