一,包和内部类
1,类名冲突
Java中每个接口或类都来自不同的类名,无论是Java API中的类与接口还是自定义的类与接口,都需要隶属于某一个类包。
2,完整的类路径
一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况
在程序中使用两个不同Date类的完整类路径,可以使用如下代码:
java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date(1000);
3,创建包
(1)在项目的src节点上右击,选择“新建”/“包”命令(英文为new/Package) 2,弹出New java Pcakage对话框,在Name文本框中输入新建的包名,然后点击Finish。
3,右击新建的包,选择New命令,这样新建的类会默认保存在该包中。另外也可以在New java class对话框中指定新建类所在的包
在类中定义包名的语法:
package 包名
注意:Java包的命令规则是全部使用小写字母
例题8.1
4,导入包
(1)使用import关键字导入包
如果在程序中使用import关键字导入com.mr,math类,在程序中使用math类时就会自动选择com.mr.math类。import关键字的语法如下:
import com.mr.*;//导入com.mr包中的所有类
import com.mr.math//导入com.mr包中的math类
为了使用包中更多的类,可以使用import关键字定时在包指定后加上*,表示可以在程序中使用该包中的所有类。
(2)使用import导入静态成员
语法
import static 静态成员
例题8.2
二,内部类
1,成员内部类
在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量,语法如下:
class OuteruClass{//外部类
class InnerClass{//内部类
}
}
例题8.3
public class Car {//创建汽车类 成员变量
private String brand;//汽车品牌
public Car(String brand) {//汽车类的构造方法,参数为汽车品牌
this.brand = brand;//给汽车品牌赋值
}//构造方法
class Engine{//成员内部类 发动机类
String model;//成员方法 发动机型号
public Engine(String model) {//发动机类的构造方法,参数为发动机型号
this.model = model;//给发动机型号赋值
}
public void ignite() {//(发动机)点火方法
System.out.println("发动机"+this.model+"点火");
}
}
public void start() {//启动(汽车)方法
System.out.println("启动"+this.brand);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Car car = new Car("大众朗行");//创建汽车类方法,并为汽车品牌赋值
car.start();//汽车类对象调用启动(汽车)方法
//创建发动机类(内部类)对象,并为发动机型号赋值
Car.Engine engine = car.new Engine("EA211");
engine.ignite();//发动机类对象调用(发动机)点火方法
}
}
成员内部类不止可以 在外部类使用,在其他类中也可以使用。在其他类中创建内部类的对象语法特殊,如下:
外部类 outer = new 外部类()
外部类.内部类 inner = outer.new 内部类();
2,使用this关键字获取内部类与外部类的引用
例题8.4
package 八;
public class TheSameName {
private int x = 7;//外部类的X
private class Inner{
private int x = 9;//内部类的x
public void doit() {
int x =11;//局部类的x
x++;
this.x++;//调用内部类的x
TheSameName.this.x++;//调用外部类的x
}
}
}
3,匿名内部类
匿名类是只在创建对象时才会编写类体的一种写法,匿名类特点:现用现写,语法:
new 父类/父接口(){
子类实现的内容
};
例题8.5
abstract class Dog1 {
String Color;
public abstract void move();
public abstract void call();
}
public class Demo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Dog1 maomao = new Dog1() {
public void move() {
System.out.println("四腿狂奔");
}
public void call() {
System.out.println("嗷呜~");
}
};
maomao.Color = "灰色";
maomao.move();
maomao.call();
}
}
使用匿名类时一个遵循以下原则:
(1)匿名类不能写构造方法
(2)匿名类不能定义静态的成员
(3)如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被Java虚拟销毁