包:搞懂3个关键字
Package
Import
Protected
包就是文件夹其实 在我们用的EditPlus里 一个页面就是一个包
既然有了文件夹那么就能多重文件夹命名方式也更加自由了
那么为了让名称的指向更加明确类名前要加包名
为了不那么累赘引入import
但import只能导入包不能导入类
这也是为什么import java.awt.*;和import java.awt.event.*;的原因
这时引出了一个问题:包之间的通讯
位于两个不同的包中的两个类什么时候才能相互访问?
如果位于两个不同的包中的两个类存在继承关系那么子类可以直接使用父类的方法吗?
必须要用 public修饰类和调用的方法而且指明类的时候要用全名:包名.类名
而如果是继承关系,而protected还有一个用处就是在同一个包中子类想覆盖父类的protected方法权限必须大于等于protected 这也保护了该方法不被随便覆盖
注意:如果你想访问父类中的方法必须通过子类中含有该方法的方法间接调用否则会报错错误提示跟你不是子类却新建了父类对象来调用是一样的
在具体实现方面:
编译时要用javac –d . 文件名.java
其中.表示本文件夹
运行之前则需要设定classpath
Set classpath = 写出你的路径
注意:不是私有才是封装把void show()前面的public去掉也相当于封装了 在包里的话 就算把类公有了也没用 外面无法访问void show()
同一个包中不能有两个或者两个以上的公共类或者接口的源文件(就是.java)
言下之意就是可以有运行文件(.class)
具体应用的时候要注意:
一个 *.java文件中,只能有一个public的类,而且这个public修饰的这类必需要和这个文件名相同.
包名称的明明必须所有字母小写
package packb;
class PackageDemo2
{
publicstatic void main(String[] args)
{
stu.StudentDemostu11 = new stu.StudentDemo("moriarty");
stu11.getName(); //第一次是EditPlus没有保存上
//后面为了赌气 完全跑偏了...直接在这里写
// stu11.show();直接调用是不行的 只能通过子类中包含show的方法间接调用
System.out.println("packb:demo2");
}
}
package per;
public class PersonDemo
{
protectedvoid show()
{
System.out.println("dafdfa");
}
}
package stu;
public class StudentDemo extendsper.PersonDemo
{
privateString name;
publicStudentDemo(String name)
{
this.name= name;
}
publicvoid getName()
{
System.out.println("子类getName");
show();
}
}