如何在java中使用另一个包中的类?

时间:2015-07-08 08:45:33

标签: java

我想知道如何使用其他包中的类

这是包project1内的文件

package project1;

class student{

    void print(){
        System.out.println("s");
    }

}

class teacher{
    void print(){
        System.out.println("t");
    }
}

public class Project1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }

}

这是包project2内的文件

package project2;

import project1.student;

public class Project2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        student x = new student();
    }

}

但是我收到的错误是学生没有公开,

我是否以错误的方式导入学生课程,以至于我无法使用学生课程,或者无法做到这一点?

5 个答案:

答案 0 :(得分:3)

检查this link

如果某个类没有修饰符(publicprivate ...),则它使用默认修饰符,这意味着只能从同一个包中访问该类。

在这个this table中,您将很容易看到:

访问级别

Modifier    Class   Package Subclass  World
public      Y       Y       Y         Y
protected   Y       Y       Y         N
no modifier Y       Y       N         N       // this is your class
private     Y       N       N         N

所以您需要在单独的文件中将Student类声明为公开,或将Project2放在与StudentTeacher相同的包中}

public class student{   
    void print(){
        System.out.println("s");
    }   
}

答案 1 :(得分:1)

问题是您的班级学生有默认修饰符,它将访问级别限制在同一个包中(无法在包project1外部访问以打包project2)。一个public class中只能有一个java file

试试这个:

  1. 在包student.java
  2. 中创建新文件project1
  3. 在上述内容中创建public class student     文件

答案 2 :(得分:1)

首先,你不能有两种主要方法。

尝试使类静态,以便您可以使用Class.etc;

访问它们

或者您可以尝试创建每个类的新对象(我认为这样更好)。 删除第二个主要方法,只留一个。 并将其作为第一个:

var base_url="http://localhost/ums/";
define(['angularAMD', 'ngRoute','flash','angular-loading-bar','ngAnimate','uniqueField','input_match','angular-chart'], function (angularAMD) {
var app = angular.module('angularapp', ['ngRoute','flash','angular-loading-bar','ngAnimate','uniqueField','input_match','angular-chart']);  
app.config(['$routeProvider', function($routeProvider){
    $routeProvider
        .when('/dashboard', angularAMD.route({
                title : 'Dashboard',
                controller : 'dashboardCtrl',
                templateUrl : base_url+'angular/partials/admin/dashboard.php',
                controllerUrl: base_url+'angular/js/admin/controllers/dashboardCtrl.js'
            }))

//.......................all routing ............//
 .otherwise({
            redirectTo : '/dashboard'
        });
}]);
app.run(['$rootScope', '$route', function($rootScope, $route) {
    $rootScope.$on('$routeChangeSuccess', function() {
        document.title = $route.current.title;
    });
}]);


  // Bootstrap Angular when DOM is ready
    return angularAMD.bootstrap(app);

});

现在,您可以使用student1.Something使用此对象访问学生班级。 除了包含main方法的类之外,对所有类执行相同的操作。     }

还要以大写字母开头。

答案 3 :(得分:0)

您应该将您的Student课程声明为公开课程,如下所示:

public class student{

    void print(){
        System.out.println("s");
    }

}

反正 根据OOP开发方法,在同一文件上有多个类(不是内部类)是一种不好的做法。它对于维护,调试,可重用组件和模块化也是不利的。

我建议您也将类声明拆分为单独的文件(即使类很小而且简单)

答案 4 :(得分:0)

您在访问修饰符时遇到问题。

您的class student现在是package private(无修饰符)。让它public在包外面使用

public class student{
 }

阅读accesscontrol了解详情。