目录
包和内部类 | |
Java类包 | 内部类 |
类名冲突 | 成员内部类 |
创建包 | ☆匿名内部类 |
导入包 |
1.java类包
在java中每定义一个类,通过java编译器进行编译之后,都会生成一个扩展名为.class的文件。当程序的规模逐渐扩大时,就很容易发生类名称冲突的现象。
java中提供了一种管理类文件的机制,就是类包。
创建类包
删除这个
1.类名冲突
java中每个接口或类都来自不同的类包,无论是Java API中的类与接口还是自定义的类与接口,都需要隶属于某一个类包,这个类包包含了一些类与接口。
2.完整的类路径
一个完整的类名需要包含与类名的组合,每个类的隶属一个类包,只要保证同一类包中的类同名,就可以有效地避免同名类冲突的情况。
3.创建包
(1)在项目的src节点上右击,选择‘新建’/‘包’命令(英文名为New/Package)。
(2)弹出‘新建java包’(New java Package)对话框,在‘名称’(Name)文本框中输入新建的包名,如package1,然后单击‘完成’(Finish)按钮。
(3)在Eclipse中创建类时,可以在新建立的包上右击,选择‘新建’(New)命令,这样新建的类会默认保存在该包中。另外也可以在New java Class对话框中新建类所在的包。
在类中定义包名的语法:
package 包名
1.创建自定义的Math类
package package1;
public class Test1 {
public static void main(String[] args) {
System.out.println("不是java.lang,Math类,而是Eighth.Math类");
}
}
运行结果
4.导入包
1.使用impost关键字导包
impost关键字的语法:
import com.mr.*//导入com.mr包中的所有类
import com.mr.Math//导入com.mr包中的Math类
2.使用import导入静态成员
使用import导入静态成员的语法如下:
import static 静态成员
2.使用Import导入静态成员
package package2;
import java.util.Scanner;
import static java.lang.System.out;
public class Test2 {
public static void main(String[] args) {
//输入一个整数
Scanner sc = new Scanner(System.in);//创建扫描器,获取控制台输入的值
int a = sc.nextInt();
//输出整数
out.println(a);
sc.close();
}
}
2.内部类
1.成员内部类
1.成员内部简介
在一个类中使用内部类,可以在内部类中存取其所在类的私有成员变量。
在成员变量类中可以随意使用外部类的成员方法及成员变量,尽管这些类成员被修饰为private。
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 mian(String[] args) {
Car car = new Car("大众朗行");//创建汽车类对象,并为汽车品牌赋值
car.start();//汽车类对象调用启动(汽车)方法
//创建发动机类(内部类)对象,并为发动机型号赋值
Car.Engine engine = car.new Engine("EA211");
engine.ignite();//发动机类对象调用(发动机)点火方法
}
}
结果如下
成员内部类不止可以在外部类中使用,在其他类也可以使用。在其他类中创建内部类对象的语法非常特殊,语法如下:
外部类 outer = new 外部类();
外部类。内部类 inner = outer.new 内部类();
2.使用this关键字获取内部类与外部类的引用
4.在内部类中调用外部类对象
public class TheSameName {
private int x = 7; //外部类的x
private class lnner{
private int x = 9;//内部类的x
private void doit() {
int x = 11;//局部变量x
x++;
this.x++;//调用内部类的x
TheSameName.this.x++;//调用外部类的x
}
}
}
2.匿名内部类
匿名类是只创建对象时才会编写类体的一种写法,匿名类的特点是“现用现写”,其语法如下:
new 父类/父接口(){
子类实现的内容
}
5.使用匿名内部创建一个抽象狗类的对象
abstract class Dog{//抽象类
String color;
public abstract void call();//抽象方法
public abstract void move();//抽象方法
}
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog wenin = new Dog() {
//匿名内部类
public void move(){
System.out.println("四腿狂奔");
}
public void call() {
System.out.println("嗷呜~");
}
};
wenin.color = "灰色";
wenin.move();
wenin.call();
}
}
结果如下
使用匿名类一个遵循以下原则:
1.匿名类不能写构造方法
2.匿名类不能定义静态的成员
3.如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被java虚拟机销毁