人生苦短我学Java-7-面向对象三大特性之封装及构造器/this等关键字使用
作者:互联网
一、封装
面向对象三大特性之封装。
1、封装性的体现:属性私有化/不对外暴露的私有方法/单例模式等等
可将属性数据声明为私有的:private,再通过封装提供公共的:public实现对属性的操作,目的:
- 隐藏一个类中不需要对外提供的实现细节;
- 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,
- 限制对属性的不合理操作;
- 便于修改,增强代码的可维护性;
如下实现:①setAge对外age属性进行操作;②getAge实现对外age的查询;但它的属性是私有的,实现属性的保护;
package com.object1226; /* @USER PPL-泡泡龙 or 广深小龙 @date 2020-12-26 22:42 */ public class AnimalTest { public static void main(String[] args) { Animal ani = new Animal(); ani.setAge(10); // System.out.println(ani.age); // 私有的,查,独立封装一个get方法 System.out.println(ani.getAge()); } } class Animal { private int age; public void setAge(int updateAge) { if (updateAge >= 0 && updateAge % 2 == 0) { age = updateAge; } else { age = 0; System.out.println("年龄输入必须为正数!"); } } public int getAge() { if (age >= 0 && age % 2 == 0) { return age; } else { age = 0; System.out.println("已默认为:0"); return age; } } }
2、四种权限修饰符
封装性的体现,需要权限修饰符来配合:
private、缺省(默认的)、protected、public
①四种权限都可以修饰:属性、方法、构造器、内部类
②修饰类,只能使用:缺省(默认)、public
二、构造器
1、也叫构造方法,但和方法是不一样的,构造器方法的作用:
- 创建对象
- 初始化对象的信息
方法是通过new对象后,调用方法;但构造器是在造对象的时候直接运行了。
存在多个重名的构造器,那么就是构造器的重载。如下例子:
类名称为:Person 再写一个构造方法名称为:Person。在一个类中,至少有一个构造器方法。注:构造方法不能有关键字:void (不然真的是个类的方法名了)
package com.object1223; /* @USER PPL-泡泡龙 or 广深小龙 @date 2020-12-27 14:22 */ public class PersonTest { public static void main(String[] args) { // 创建类的对象,默认是空参数 // Person p = new Person(); // 在new的时候传入参数,初始化属性 Person p = new Person("PPL"); System.out.println(p.GetName()); } } class Person { String name; // 存在多个重名的构造器,那么就是构造器的重载 // 构造器1 public Person(String str) { name = str; } // 构造器2 public Person() { System.out.println("构造器2"); } //方法 public String GetName() { return name; } }
2、属性赋值的顺序:
①默认初始化
②显示初始化
③构造器初始化
④通过对象的方法或对象的属性的方式初始化;
3、this关键字的使用
this可以修饰:属性、方法、构造器
特殊情况下,如果方法的形参和类的属性同名时,我们必须显式使用this.变量,表名此属性为类的属性(形参和类属性重名下,用this声明为类的变量)
this关键字属性调用,如下例子:
package com.object1223; /* @USER PPL-泡泡龙 or 广深小龙 @date 2020-12-27 15:32 */ public class ThisTest { public static void main(String[] args) { Person1 p1 = new Person1(); p1.setName("PPL"); System.out.println(p1.getName()); } } class Person1 { String name; public void setName(String name) { name = name; // 方法的形参与类的属性重名的情况下,又想重名咋办? this.name = name; // 可以使用this关键字,声明为类的属性; } public String getName() { return name; } }
this关键字构造器中调用,如下例子:
- 类的构造器中调用:可以使用this(形参列表),进行调用;
- 类的构造器中不能调用自己本身,且最多只能调一个,不能调多个;
构造器3调用构造器2,构造器2调用构造器1。
package com.object1223; /* @USER PPL-泡泡龙 or 广深小龙 @date 2020-12-27 15:54 */ public class ThisC { public static void main(String[] args) { ThisCTest t = new ThisCTest("PPL", 18); System.out.println(t.getAge()); System.out.println(t.getName()); } } class ThisCTest { private String name; private int age; // 构造器1 public ThisCTest() { System.out.println("创建对象初始化:正在初始化中..."); } // 构造器2 public ThisCTest(String name) { this(); // this(形参),既调用:构造器1 this.name = name; } // 构造器3 public ThisCTest(String name, int age) { this(name); // this(形参),既调用:构造器2 this.age = age; } public int getAge() { return age; } public String getName() { return name; } }
4、package关键字的使用
- 为了更好的实现项目中类的管理,提供包的概念(package)
- 使用package声明类或者接口所属的包,声明在首行(类似Python的模块库导入)如:package com.object1223;
- 每一个. 表示一个文件的层级,同一个包下,不能命名同名的接口、类。不同的包下,可以命名同名的接口、类。
5、import关键字的使用
- 为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类
- 或全部类(.*)。import语句告诉编译器到哪里去寻找类。
- 语法格式:import 包名. 类名;
在IDEA中也挺方便,如果要使用哪个包,就直接写会自动导入,如:
import java.util.Scanner;
MVC设计模式:
①model 模型层:主要处理数据
②view 视图层:显示数据
③controller 控制层:处理业务逻辑
感谢尚硅谷在B站开源教学视频提供学习,欢迎来大家QQ交流群一起学习:482713805
标签:Java,name,age,构造,苦短,我学,属性,public,String 来源: https://www.cnblogs.com/gsxl/p/14181697.html