面向对象的特征一:封装性
随着我们系统越来越复杂,类会越来越多,那么类之间的访问边界必须把握好,面向对象的开发原则要遵循“高内聚、低耦合”
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅暴露少量的方法给外部使用,尽量方便外部调用。
何为封装性?
所谓封装性,就是把客观事物封装成抽象概念的类,并且类可以把自己的数据和方法只向可信的类或者对象开发,向没必要开放的类或对象隐藏信息。
权限修饰符
4种权限修饰符: private / 缺省 / protected / public
可以使用4种权限修饰符修饰类及类的内部成员。当这些成员被调用时,体现可见性的大小。
实际案例: 在题目中,我们给Animal的对象的legs属性赋值。在实际的常识中,我们知道legs不能赋值为负数的。到那会是如果直接调用属性legs没事不可以加入逻辑判断的,为了解决这个问题:
> 将legs属性私有化(private),禁止在Animal类的外部直接调用此属性
> 提供给legs属性赋值的setLegs()方法,在此方法中加入legs赋值的判断逻辑 if(l >= 0 && l % 2 == 0) 将此方法暴露出去,使得Animal类的外部调用此方法,对legs属性赋值。
> 提供给legs属性获取的getLegs()方法,此方法对外暴露。使得在Animal类的外部还可以调用此属性的值。
public class AnimalTest { public static void main(String[] args){ Animal animal1 = new Animal(); animal1.name = "小兔"; // animal1.legs = -4; 这里的赋值其实是不合理的,所以为了将这种不合理的赋值消灭 我们可以写一个赋值的方法,并取消这种.的赋值方法 animal1.setLegs(4); // 那么相应的我们输出就不能写: // System.out.println(animal1.legs); 因为我们不能够.的方式调用 所以我们还需要一个获取legs值的方法 System.out.println(animal1.getLegs()); animal1.eat(); } } class Animal{ String name; private int legs; // 为了防止用户用.的方式去赋值legs public void eat(){ System.out.println("动物觅食"); } public void setLegs(int l){ if(l >= 0 && l % 2 == 0){ legs = l; }else{ System.out.println("你输入的数据非法!"); } } public int getLegs(){ return legs; } }
权限修饰符的范围
类: 只能使用public / 缺省 修饰
类的内部成员: 可以使用4种权限修饰
封装性的体现
> 场景1: 私有化(private)类的属性,提供公共(public)的get和set方法,对此属性进行获取或修改
> 场景2: 将类中不需要对外暴露的方法,设置为 private
> 场景3: 单例模式中构造器private(私有)的了,避免在类的外部创建实例。
构造器
作用1:搭配new关键字,创建类的对象。
作用2:在创建对象的同时,可以给对象的相关属性赋值
格式: 权限修饰符 类名(形参列表){ }
注意: 创建类以后,在没有显示提供任何构造器的情况下,系统会默认提供一个空参的构造器,且构造器的权限与类声明的权限相同。
一旦类中显示声明了构造器,则系统不再提供默认的空参的构造器。
public class Student { String name; int age; String school; String major; /* *与类名一致的方法名 * 构造方法是在创建对象的时候调用 * 类在没有定义构造方法的时候有一个默认的无参构造 * 初始化成员变量 */ public Student (String n, int a){ name = n; age = a; } public Student (String n, int a, String s){ name = n; age = a; school = s; } public Student (String n, int a, String s, String m){ name = n; age = a; school = s; major = m; } public String getInfo(){ return "name = " + name + ",age = " + age + ",school = " + school + ",major = " + major; } } public class StudentDemo { public static void main(String[] args){ Student s=new Student("小明", 19); System.out.println(s.age); System.out.println(s.getInfo()); } }
属性赋值过程
在类的属性中,有哪些位置给属性赋值:
① 默认初始化;
② 显式初始化;
③ 构造器中初始化;
④ 通过“对象.方法”的方式赋值;
⑤ 通过“对象.属性”的方式赋值;
执行的先后顺序: ① - ② - ③ - ④ / ⑤
以上操作在对象创建过程中可以执行的次数如何:
> 只能执行一次: ①、②、③
> 可以多次执行: ④、⑤
JavaBean
JavaBean是一种Java语言写成的可重用组件。
好比做了一个扳手,这个扳手会在很多地方被拿去用。这个扳手也提供多种功能(可以拿这个扳手扳、锤、撬等),而这个扳手就是一个组件。
所谓JavaBean,是符合如下标准的java类:
① 类是公共的 ② 有一个无参的公共的构造器 ③ 有属性,且有对应的
UML类图
常用的UML工具软件有 PowerDesinger、Rose和 Enterprise Architect。
UML工具软件不仅可以绘制软件开发中所需的各种图表,还可以生成对应的源代码。
在软件开发中,使用UML类图可以更加直观地描述类内部结构(类的属性和操作)以及类之间的关系(如关联、依赖、聚合等)
- + 表示public类型, - 表示private类型, # 表示protected类型
- 方法的写法: 方法的类型(+、-) 方法名(参数名:参数类型):返回值类型
- 斜体表示抽象方法或类
标签:属性,Java,String,基础,name,legs,public,赋值 From: https://www.cnblogs.com/gjwqz/p/18352022