Java(包和内部类)

 一   Java包

1.1类名冲突

    Java中每个接口或类都来自不同的类包,无论是Java API中的类与接口还是自定义的类与接口,都需要隶属于某一个类包,这个类包包含了一些类和接口。如果没有包的存在,管理程序中的类名称将是一件非常麻烦的事情。如果程序只由一个类组成,自然不会出现类名重叠的问题,但是随着程序的类的数量增多,难免会出现这一问题。

      例如,在程序中定义一个Login类,因业务需要,还要定义一个名称为Login的类,但是这两个类所实现的功能完全不同,于是问题就产生了——编译器不会允许存在同名的类文件。解决这类问题的办法是将这两个类放置在不同的类包中。

1.2完整的类路径

        编写Java程序经常用到String类,其实String类并不是它的完整名称,就如同一个人需要有名有姓一样,String类的完整名称如图所示。可以看出,一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况。
 

 在java中我们经常用:

import.java.lang.String的语法导入包。

举个例子:

 没有import语句时会报错,加入后:

 当要创建多个对象时,我们是不是也要写多个import语句?当然可以但这样显得太麻烦,只需要导入:

import Java.util.*

 在程序中使用两个不同Data类的完整路径,可以使用如下代码:

java.util.Data data=new java.util.Data();
java.sql.Data data2=new java.sql.Data(100);

1.3创建包

 

 

1.在这里我们新建了一个包texT,在此包中创建了一个类Te.注意包的命名要全部为小写字母。(开头必须小写)我这里为了区分其他的,最后一个字母用了大写。

 

package texT;

public class Te {
	public void show() {
		System.out.println("我没K,我没K,我没K");
	}

}

 2.我们再到默认包中创建一个同名的类Te:

public class Te {
	public void show() {
		System.out.println("恐龙抗狼抗狼抗");
	}

}

3.最后来创建对象,运行一下:

(1)它运行的是默认的包的结果。

(2)我们导入包以后,它运行的是texT包里面的结果。 

 

(3)使用完整路径来运行出两种结果。

 1.4导入包

1.使用import关键词导入包

import关键词语法如下:

import com.mt*;         //导入com.mt包中所有的类

import com.mt.Math   //导入com.mt中的Math类

2.使用import导入静态成员

  import关键字除导入包外,还可以导入静态成员。

语法如下:

import static 静态成员

二   成员内部类

2.1成员内部类简介

 成员内部类的语法如下:

class Outerclass{                      //外部类

          class   innerclass{           //内部类

           }

}

在成员内部类中可以随意使用外部类的成员方法以及成员变量。


public class Demo {//外部类
	inclass in=new inclass();//外部类不可以直接调用内部类的方法,要先创建内部类的对象
	public void out() {//外部类方法
		in.show();
	}
	class inclass{//内部类
		int y=0;
		public inclass(){//也可以构造内部类的构造方法
			
		}
		public void show() {//内部类方法
			System.out.println("内部类方法y="+y);
		}
		
	}

	public static void main(String[] args) {
		Demo d=new Demo();//创建外部类对象
		d.out();
		Demo.inclass in=d.new inclass();//创建内部类对象
		in.show();

	}

}

 2.2使用this关键词获取内部类与外部类的引用

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


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
 		}
	}

	public static void main(String[] args) {
	}

}

三    匿名内部类

 匿名类是只在创建对象时才会编写类体的一种写法。匿名类的特点是现用现写,语法如下:

new 父类/父类接口(){

    子类实现的内容

};


public class Demo {
	public outinterface2 action() {//创建一个方法返回接口的对象
	return new outinterface2() {//没有对象,直接创建一个接口,接口并不是具体的类,这里我们可以用匿名的类
		/*类体*/
		private int i=0;
		public int getvalue() {
			return i;
		}
	};//匿名的内部类
	}

}

interface outinterface2{//创建了一个接口
	
}

上面匿名内部类的效果相当于:


public class Demo1 {
	public outinterface2 action() {
	return new interface2();
	}
	
	class interface2 implements  outinterface2{
		private int i=0;
		public int getvalue() {
			return i;
		}
	}

	interface outinterface2{
	
	}
	
}

这两个效果是等价的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值