第八章总结(包和内部类)

8.1 Java类包

8.1.1 类名冲突

Java中每个接口或类都来自不同的类包,无论是Java API中的类与接口,都需要隶属于某一个类包,这个类包包含了一些类和接口。如果没有包存在,管理程序中的类名称将是一件麻烦的事情。为了避免类名重叠的问题,则需创建新的类。

8.1.2 完整的类路径

一个完整的类名需要包名和类名的组合,每个类都隶属一个类包,只要保证同一类包的类不同名,就可以有效避免同名类冲突的情况。

8.1.3 创建包

(1)在项目的src节点上右击,选择“新建”/“包”命令(英文为New/Package)。
(2)弹出“新建Java包”(New java Package)对话框,在“名称”(Name)文本框中输入新建的包名,然后单击“完成”(Finish)按钮。
(3)在Eclipse中创建类时,可以在新建立的包上右击,选择“新建”(New)命令,这样新建的类会默认保存在该包中。另外也可以在New Java Class对话框中指定新建类的所在包。
	在Java中包含设计应与文件系统结构相对应。没有定义包的类会被归纳在默认包(defaul package)中。在类中定义包名的语法为:**package 包名**

例8.1 创建自定义Math类

package com.mr;    //指定包名

public class Math {
	public static void main(String[] args) {
		System.out.println("不是java.lang.Math类,而是com.mr.Math 类");
	}
}

结果为:
在这里插入图片描述

8.1.4 导入包

1.使用import关键字导入包语法如下:
**import com.mr.*;  // 导入com.mr包中的所有类。**   **import com.mr/Math //导入com.mr包中的Math类**
2.使用import导入静态成员语法:import static  静态成员

例8.2 使用Import导入静态成员

package com.mr;
import static java.lang.Math.max;   //导入静态成员方法
import static java.lang.System.out;  //导入静态成员变量
public class ImportTest {
	public static void main(String[] args) {
		out.println("1和4的较大值为:"+ max(1,4));
	}
}
	结果为:

在这里插入图片描述

8.2 内部类

	在一个文件中定义两个类,则其中任何一个类都不在另一个类的内部,如果在类中再定义一个类,则将在类中再定义的那个类称为内部类。

1.成员内部类简介

	在一个类中使用内部类,可以在内部类中直接存取其所在类的语法如下:
	class OuterClass{
			class InnerClass{
			}
			}

例8.3 使用成员内部类模拟发动机点火

代码为:

public class Car {
	 //成员变量
	 private String brand;
	 
	 //构造方法
	 public Car(String brand) {
	  this.brand = brand;
	 }
	 
	 //成员方法
	 //成员内部类(发动机类)
	 class Engine{
	  String model;
	  private String brand;
	  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();//发动机类对象调用点火方法
	 }
	 
	}

结果为:
在这里插入图片描述

成员内部类不止可以在外部类中使用,在其他类中也可以使用。语法如下:
外部类 outer = new 外部类();
外部类.内部类 inner = outer.new 内部类();

注意:(1)如果在外部类和非静态方法之外实例化内部类对象,需要使用“外部类.内部类”的形式指定该对象的类型。
(2)内部类对象会依赖于外部类对象,除非已经存在一个外部类对象,否则类中不会出现内部类对象。

2、使用this关键字获取内部类与外部类的引用

如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字。

例8.4 在内部类中调用外部类对象

代码为:

public class TheSameName {
	private int x = 7;
	private class lnnre{
		private int x = 9;
		public void doit() {
			int x = 11;
			x++;
			this.x++;
			TheSameName.this.x++;
		}
	}
}

8.2.2 匿名内部类

匿名类是只在创建对象时才会编写类体的一种写法。匿名类的特点是“现写现用”,其语法如下:
new 父类/父类口(){
		子类实现的内容
		};

例8.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虚拟机销毁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值