Day30--如何引用其他的类

Day30--如何引用其他的类

  1. 同一包内引用其他类

    • 无需导入(在某些情况下):如果多个类在同一个包中,并且没有使用任何访问限制(如private)阻止访问,在一个类中可以直接创建对象然后使用另一个类。例如,有ClassAClassB在同一个包com.example中:

    • package com.example;
      class ClassA {
          public void methodA() {
              ClassB objB = new ClassB();
              // 可以直接使用ClassB的方法(假设ClassB有合适的方法)
              objB.methodB();
          }
      }
      class ClassB {
          public void methodB() {
              System.out.println("This is methodB in ClassB");
          }
      }
      
    • ClassAmethodA方法中,直接通过new ClassB()创建了ClassB的对象,并调用了ClassBmethodB方法。因为它们在同一个包中,所以可以直接访问。

    • 需要导入(当存在命名冲突等情况时):如果在同一个包中有同名的类或者想要更清晰地表明类的引用,可以使用import语句(虽然在这种情况下不是必须用于访问)。例如,如果有两个ClassB类定义在不同的目录但在同一个包中(这可能是由于复杂的项目结构导致),可以这样写:

    • package com.example;
      import com.example.someSubDirectory.ClassB;
      class ClassA {
          public void methodA() {
              ClassB objB = new ClassB();
              objB.methodB();
          }
      }
      
    • 这里import语句明确指出了要引用的ClassB是来自com.example.someSubDirectory目录下的。

  2. 不同包内引用其他类

    • 基本引用步骤:如果要引用不同包中的类,首先需要使用import语句导入该类。例如,ClassCcom.example.package1包中,想要引用com.example.package2包中的ClassD

    • package com.example.package1;
      import com.example.package2.ClassD;
      class ClassC {
          public void methodC() {
              ClassD objD = new ClassD();
              // 可以使用ClassD的方法(假设ClassD有合适的方法)
              objD.methodD();
          }
      }
      
    • 先通过import com.example.package2.ClassD;导入ClassD类,然后就可以在ClassCmethodC方法中创建ClassD的对象并调用其方法。

3.需要注意:

如果多个类在同一个包中,并且没有使用任何访问限制(如private)阻止访问,在一个类中可以直接创建对象然后使用另一个类。我对这句话有一个疑问。比如,在basic包里面有一个类Demo01;在array包里面有一个类ArrayDemo01;而basic和array都是在www包里面的。那么,Demo01和ArrayDemo01算是在同一个包里面吗?在Demo01类中可以直接创建对象然后使用ArrayDemo01类吗?

这是不能的。!!!!!!!!!!!

  1. 包的概念和层次结构

    • 在Java中,包(package)是一种组织类和接口的机制,用于避免命名冲突并提供访问控制。包是有层次结构的,类似于文件系统中的目录结构。
    • 例如,你提到的www是一个顶级包,basicarraywww包下的子包。
  2. 不同子包中的类访问规则

    • 即使basicarray都在www包下,Demo01(在basic包中)和ArrayDemo01(在array包中)并不在同一个包中。
    • 在Java中,不同子包中的类默认是不能直接互相访问的,就像Demo01类不能直接创建ArrayDemo01类的对象并使用。如果要访问,需要满足以下条件之一:
      • 使用import语句和完全限定名
        • 可以在Demo01类中通过import www.array.ArrayDemo01;导入ArrayDemo01类(假设类的访问权限允许),然后就可以创建ArrayDemo01类的对象并使用。或者不使用import语句,而是在创建对象时使用完全限定名,例如www.array.ArrayDemo01 arrayObj = new www.array.ArrayDemo01();
      • 修改访问权限
        • 如果ArrayDemo01类的构造函数和需要访问的成员有足够宽松的访问权限(如public),并且你正确地处理了包的导入或使用完全限定名,就可以访问。例如,如果ArrayDemo01类的构造函数是public,并且你已经正确导入或者使用完全限定名,就可以在Demo01类中创建ArrayDemo01类的对象。
posted @ 2024-11-04 14:06  1hahahahahahahaha  阅读(46)  评论(0)    收藏  举报