【问题标题】:how to create an object of a class in a different package in another class [duplicate]如何在另一个类的不同包中创建一个类的对象[重复]
【发布时间】:2014-03-23 11:09:59
【问题描述】:

我是 java 的初学者,我曾经在 C++ 中编写代码,并且在使用类时,我曾经在单独的文件中定义它们,然后将这些类包含在我的主文件中。

我正在尝试学习用于套接字编程的线程,以便我可以将多个服务器端口作为线程打开并接受多个客户端。我知道在 Java 中文件名应该与类名相同(如果我错了,请纠正我)。这就是我想要做的:

ma​​in.java

include derived.java;

class main1 

{

  main1() 

        {

             System.out.println("Constructor of main1 class.");

        }

  void main1_method() 
        {

             System.out.println("method of  main 1 class");
        }

  public static void main(String[] args) 

        {

             main1 my = new main1();
             Derived derivedThread = new Derived();
             derivedThread.start();

        }
}

derived.java

public class derived extends Thread 

    {       
            public void run()

            {

                System.out.println("starting a new thread");

    }

    } 

如何在 main 中创建派生类对象并将其包含在我的 main1.java 文件中?

我想我并不完全理解 Java 中的类是如何工作的,以及必须使用什么类路径。我的网络项目有一个截止日期,我非常落后,所以请帮助我!

【问题讨论】:

  • 文件名同main1.java
  • Start here。在 java 中,您通过 import name.of.package.className 导入。总的来说,这不是一个很好的 Java 类示例,如果没有为您编写它们,很难告诉您如何纠正它们。请参阅我链接的教程。
  • include derived.java; 是您文件的一部分吗?这不是有效的 java 代码
  • 你不需要导入它,你自己说两个类都在同一个包中。它无法识别它,因为new Derived()new derived() 不同。大写在 Java 中很重要,并且您的类名是小写的,而您正在尝试使用大写的对象。 Derived 应在文件名、类名、构造函数和对构造函数的任何调用中大写。
  • 查看我的答案,了解这看起来像“java”的方式。我认为您的问题主要是混淆 C++ 和 Java 语法。你已经很接近了,但只要继续努力,你会没事的。

标签: java class inheritance


【解决方案1】:

删除你的文件并试试这个,这就是它在 Java 中的样子:

派生类: Derived.java

public class Derived extends Thread {       
        public void run() {
            System.out.println("starting a new thread");
        }
} 

Main1 类: Main1.java

public class Main1 {
        public Main1() {
            System.out.println("Constructor of main1 class.");
        }

        void main1_method()  {
            System.out.println("method of  main 1 class");
        }

        public static void main(String[] args) {
            Main1 my = new Main1();
            Derived derivedThread = new Derived();
            derivedThread.start();
        }
}

注意:

1) 类名总是大写的,你是对的,文件名必须相同。此外,构造函数和对构造函数的任何调用都必须大写。

2) 如果将类放在同一个包中,则不需要导入它们。如果你有多个包,你会像这样导入:import packageName.className;。最后不需要 .java ,严格来说是类名。你也可以有嵌套的包,所以你可能会看到:import java.util.ArrayList;。这将使用在 java 包(内置)中的 util 包中找到的 ArrayList 类。您不必担心在较小的项目上制作嵌套包,但这就是概念。

3) 请注意,我将 public 修饰符添加到 Main1 和它的构造函数。为类名和方法以及类变量提供修饰符是一种很好的做法。有关修饰符的信息,请参阅this SO Question。对于初学者,您应该主要只关心公共和私有。

希望对您有所帮助,祝您学习 Java 顺利。

【讨论】:

  • 谢谢,这真的很有帮助。
【解决方案2】:

不需要使用这个include derived.java;。如果派生类存在于不同的包中,则使用import。类Derived在调用和声明时是不同的。

class main1     // Class name must start with Uppercase
{
 public static void main(String[] args) 
    {
      main1 my = new main1();   // Can be remove
      Derived derivedThread = new Derived();
      derivedThread.start();
        }
}


    public class derived extends Thread  // Change derived to Derived
--------------------^
   {       
      public void run()
   {
   System.out.println("starting a new thread");
    }
} 

我有删除构造函数和一个未使用的方法。

【讨论】:

  • 我想学习如何在我的主文件的 .java 文件中使用单独编写的类来创建它的对象,你明白我的意思吗?
  • 我的项目有一个默认包。默认包有 main1.java 和 derived.java。我想在 main1.java 中导入derived.java。我该怎么做。
  • 当我这样做时,它给出了一个错误,说无法解析导入派生
  • 亲爱的你已经创建了派生类并且你正在尝试导入派生类。Java 是区分大小写的语言。检查我的答案
  • 亲爱的,我不是在尝试导入 Derived.java,而是在写 import derived.java
猜你喜欢
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多