类名冲突
java中每个接口或者是类都来自不同的类包,无论是java API 中的类与接口还是自定义的类与接口,都属于一个包,这个类包 包含了一些类和接口。
两个类所实现的功能完全不同,于是问题就产生了编译器是不会允许存在同名的类文件。解决问题的方法是放在不同的类包中
完整的类路径
在程序中使用两个不同Date类的完整的类路径,可以使用如下代码:
java.util.Date date=new java.util.Date();
java.sql.Date date2=new java.sql.Date(1000);
创建包
例子:
点击eclipse中复制其在的位置,在文件中查找 是否存在其创建的项目和类
Name:ba1
在eclipse中创建应该项目为ba 在ba中的src中创建一个class :ba1
在ba1中创建一个class为T1
( file中新建项目和类 )
在ba1中创建一个项目ba2 在 b2中创建一个class为T2
创建自定义Math类
package com.mr;//指定包名
public class Math {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("不是java.lang.Math类,而是com.mr.Math类");
}
}
运行结果为:
不是java.lang.Math类,而是com.mr.Math类
导入包
使用import关键字导入包
如果在程序中使用import关键字导入com.mr.Math类,在程序使用Math类时就会自动选择com.mr.Math类。语法如下:
import com.mr.*;//导入com.mr包中所有类
import com.mr.Math//导入com.mr包中Math类
使用import导入静态成员
语法
import static 静态成员
例子:
package com.mr;
import static java.lang.Math.max;
//导入静态成员方法
import static java.lang.System.out;
//导入静态成员变量
public class ImportText {
public static void main(String[] args) {
// TODO Auto-generated method stub
out.println("1和4的较大值为:"+ max(1,4));
//主方法中可以直接使用这些静态成员
}
}
运行结果为:
1和4的较大值为:4
内部类
成员内部类
class OutrClass{//内部类
class InnerClass{//外部类
}
}
例子:
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) {
Car car=new Car("大众朗行");//创建汽车类对象,并为汽车品牌赋值
car.start();//汽车类对象调用启动方法
//创建发动机类对象,并为发动机型号赋值
Car.Engine engine =car.new Engine("EA211");
engine.ignite();//发动机类对象调用点火方法
}
}
运行结果为:
启动大众朗行
发动机EA211点火
成员内部不止可以在外部类中使用,在其他类中也可以使用。在其他类中创建内部类对象的语法非常特殊,语法:
外部类 outer =new 外部类();
外部类.内部类 inner = outer.new 内部类();
使用this关键字获取内部类与外部类的引用
如果在外部类中定义的成员变量和内部类的成员变量名称相同,可以使用this关键字
例子:
匿名内部类
匿名类是只创建对象时编写类体的一种写法。特点是“现用现学”,语法:
new 父类/父接口(){
子类实现的内容
};
补全抽象方法中少的方法体
运行结果;
使用匿名类时一个遵循以下原则:
(1)匿名类不能写构造方法
(2)匿名类不能定义静态的成员
(3)如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被Java虚拟销毁