包&封装&继承总结

发布时间 2023-12-28 20:44:33作者: ZWJAS

总结

包package概念

概念:简单的理解包就是一个文件夹。

包作用

① 方便管理项目中的类等文件。
② 可以避免类名冲突的问题。

使用包

定义包

包命名规范:一般是公司域名反写.项目名.模块名字.子模块名;
要求:包名是全英文小写。

package cn.itsource.packagedemo;// 声明包

导入包

为什么要导包?
当我们需要使用别人或者JDK中的类的时候,就需要告知JVM从什么地方去加载这个类,这个过程就是导包。

其实本质是导入包中的类。
导入包的语法 : import 包名.子包名.类名;
现在用eclipse工具自动导包,快捷键:ctrl + shift + o
注意:
1.导入包的代码应该在声明包(就是该类所在的包)的后面,声明类的前面。
2.import java.util.*; 表示导入本包中所有会使用到的util包中的类,只会导入util包下面直接的类型,不包括util包的子包中的类型。
3.java.lang是核心包,下面的直接类型是自动导入的;
例如:String、System类,lang包的子包中的类型不会自动导入,需要手动导入。
4.在一个类中会用到同名不同包的时候必须使用全限定路径

封装

  • 为什么要封装

    Java中是通过封装来完成保护内部成员的目的,所以,这就是我们学习封装的目的。

  • 封装的作用

    封装是为了保护内部数据的安全:

    1. 不希望在外部类中随意访问类中的成员变量
    2. 达到权限要求的才能访问。
    3. 只是获取数据的时候。例如:单例模式。
  • 怎么封装

    步骤:

    1. 私有化成员变量(用private修饰成员变量)。
    2. 为每一个成员变量提供合理的public修饰的:
      getXxx()方法 获取成员变量的值,如果当前成员变量类型是boolean类型,将getXxx()改为isXxx()。
      setXxx(...)方法 设置成员变量的值。
    3. 提供一个无参构造,有参构造根据需求确定是否要写。
    4. 该类用public修饰。
  • 封装的注意事项

    1. 不是只有private才叫封装,private只是最大限度的封装而已。
    2. get和set方法都是只能获取或者赋值一个成员变量,不能set(String n, double m, boolean v)赋值3个成员变量。
    3. 单一职能原则:功能最小化,不要想着一个方法写完所有的功能,因为代码复用率高。
  • 封装小结

    对象赋值的方式:

    1. 有参构造 :new 类名(...);
    2. 对象名.setXxx(...);
    3. 对象名.成员变量 = 值;// 封装后不能用
      一般配合使用,如果成员变量比较少,可以直接用有参构造。
      如果成员变量比较多,一般用无参构造 + setXxx(...)。
      如果对象已经创建,需要修改值,用setXxx(...)。
      3.对象取值的方式:
    4. 对象名.getXxx(); / 对象名.isXxx()
    5. 对象名.成员变量 ;// 封装后不能用

this

  • 1.this的概念:

    this指代当前对象,即,哪个对象调用就指代哪个对象。

  • this使用

    1. 解决局部变量和成员变量的二义性【set方法和有参构造中形参跟成员变量同名不同义】

      public Account(String name) {
      	// 在方法中使用变量的时候,优先从局部范围找,就近原则
      	// 这里因为成员变量和局部变量名字相同,存在二义性问题
      	// 要解决二义性问题,就需要用到this,加上this,就会直接从成员变量位置找name
      	this.name = name;
      }
      
    2. 本类中构造方法之间的相互调用,但是必须是构造方法内的第一句。

      语法:this(...); 调用本类中的另一个构造方法,并不会创建额外的对象,会根据参数自动匹配调用对应的构造方法。
      作用:
      	1.可以创建对象的时候,给定某些成员变量默认值
      	2.可以复用其它构造方法,简化给成员变量赋值的代码
      例如:
      // 1.可以创建对象的时候,给定某些成员变量默认值
      public Account(String name) {
      	// name和111111都是String类型,只不过name是一个变量,而111111是一个写死的值
      	// 并通过该构造方法创建的对象都有相同的   【默认密码】
      	this(name,"111111");// 必须是构造方法内的第一句,这里调用的是有两个String参数的构造方法
      }
      public Account(String name,String pwd) {
      	// 要解决二义性问题,就需要用到this,加上this,就会直接从成员变量位置找name
      	this.name = name;
      	this.pwd = pwd;
      }
      			
      // 2.可以复用其它构造方法,简化给成员变量赋值的代码
      public Account(String name,String pwd,double money) {
      	/*
      		this.name = name;
      		this.pwd = pwd;
      		可以使用下面的方式,this(...)简化代码
      	 */
      	this(name,pwd);// 复用上面的有两个String参数的构造方法,简化代码作用
      	this.money = money;
      
  • this注意和小结

    • this用途:
      1. 解决局部变量和成员变量的二义性(掌握)
      2. 在本类之间,构造方法之间的相互调用this()调用无参数的构造方法,this(...)可以添加参数, 表示调用有参数的构造方法 (掌握)
      3. this作为参数传递,this作为返回值 (了解)
    • this注意事项:
      1. this不能在静态的方法中使用: 无法从静态上下文中引用非静态成员this。
      2. static是类级别,this是对象级别
        static修饰的是属于类。
        this是属于某一个具体的对象。

继承

  • 继承引入

    image-20231210091316948

    三个类都有重复的代码,可以把这共同的代码抽出去,抽出去放到另外一个类里面;下面的3个类和上面的类需要发生一点关系(继承),上面的类叫做 父类(超类,基类,根类),下面的类叫子类(派生类,拓展类);
    好处 : 提高了代码的复用性

  • 继承作用

    代码复用,提高开发效率和程序的扩展性。

  • Java中类继承的基本语法

    ① Java类中的继承的语法格式:
    class A{}
    class B extends A{}
    A 就是B的父类、基类、根类、超类
    B是A的子类、派生类、拓展类
    ② 验证:子类中是否可以继承到父类中的东西(通过创建子类对象来操作从父类继承的东西)

  • 子类可以从父类继承哪些成员

    除了构造方法private修饰的属性和方法外不能被继承其他都可以继承过来
    但是,私有化成员不能直接通过子类对象直接访问,但是可以通过继承过来的公共方法间接访问。

  • Java中类的继承特点

    ① 单继承(一个类只能够有一个直接父类)
    ② 多重继承(多层级的继承), 一个类可以有子类,子类还可以有子类...

    ③ 每一个类都有一个直接父类,如果没有看到显示的继承代码,那么就隐式继承Object