黑马程序员—学习笔记—接口

来源:互联网 发布:网络摄像头 编辑:程序博客网 时间:2024/05/17 17:56

      ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


接口的复习巩固

接口定义的时候,格式有固定的写法:

1,        接口中的常见定义:常量,抽象方法。成员都是public的。

2,        接口中的成员都有固定的修饰符,如果没有加,系统会默认加上。

[java] view plaincopy
  1. interface Inter  
  2.   
  3. {  
  4.   
  5.       public static final int a = 100;  
  6.   
  7.       public abstract void function();  
  8.   
  9. }  

也可以这样

[java] view plaincopy
  1. interface Inter  
  2. {  
  3.      int a = 100;  
  4.     void function();  
  5. }  


这里系统默认就会加上接口中特定的修饰符。也必须满足那些修饰符所规定的。

接口:是不可以创建对象的,因为有抽象方法。需要被实现后,才能使用实现类去创建一个对象。如果实现类没有覆盖接口中的方法,则必须定义为抽象类。

 

使用接口中的公共静态常量时候,有三种方式:

1.子类对象.常量 

2.接口名.常量

3.子类.常量

在编译完成后,一个接口也被编译成一个字节码文件。

所以,接口也是一种特殊的类,可以使用接口名.常量。去访问静态成员。当Interface这个接口一加载到内存中的时候,这个静态的成员就已经被创建好了。

但是上边的三种方式都不允许对这个成员赋值,因为是一个常量。

 

接口的最大特性:就是可以被类多实现,弥补了java中类与类之间不能多继承的缺点。

Java不支持多继承的原因是因为父类中的方法有重复,会导致子类调用的时候出现问题,为什么接口就没有这个问题了呢?多继承的父类的方法都有方法体,多实现接口中没有方法体,子类爱怎么实现都可以,也就是在不同接口中的方法被同一个实现了该接口的类去覆盖掉了。

[java] view plaincopy
  1. interface A  
  2.   
  3. {  
  4.   
  5.       public abstract void function();  
  6.   
  7. }  
  8.   
  9. interface B  
  10.   
  11. {  
  12.   
  13.       public abstract void show();  
  14.   
  15. }  
  16.   
  17. class Cimplements A,B  
  18.   
  19. {  
  20.   
  21.       @Override  
  22.   
  23.       public void function() {  
  24.   
  25.            // TODO Auto-generated method stub  
  26.   
  27.             
  28.   
  29.       }  
  30.   
  31.       @Override  
  32.   
  33.       public void show() {  
  34.   
  35.            // TODO Auto-generated method stub  
  36.   
  37.             
  38.   
  39.       }  
  40.   
  41. }  


接口与接口之间也有关系。(继承关系)

[java] view plaincopy
  1. interface A  
  2. {  
  3.     public abstract void function();  
  4. }  
  5. interface B extends A  
  6. {  
  7.     public abstract void show();  
  8. }  
  9. //而且接口之间的继承支持多继承。  
  10. interface A  
  11. {  
  12.     public abstract void function();  
  13. }  
  14. interface C  
  15. {  
  16.     public abstract void ff();  
  17. }  
  18.   
  19. interface B extends A,C  
  20. {  
  21.     public abstract void show();  
  22. }  


接口的设计原则:对于公共类型的属性和方法,应该放在抽象类中去定义。而对于一些特殊的属性和方法,由接口去实现。用于实现特定对象的一些特定功能。

继承和实现的区别:继承就是说你(子类)是我(父类)的一种。现实就是说你(类)像我(接口),总的一句话:基本功能定义在类中,特定功能定义在接口中。

 

 

 

包(package)//为了更好的管理java文件。

文件夹在java中可以用包去表示。

给类定义一个包:(标注这个类的包名)

在文件代码的第一行去定义:package  包名;

有了包名的话,类的全名就叫包名+类名。

在运行的时候,为包名.类名,去加载并执行这个类。而且java命令的格式也有变化。

 

当一个类有了包之后,不同包下的类应该怎么样访问。

[java] view plaincopy
  1. Package a;  
  2.   
  3. Class A{  
  4.   
  5.    
  6.   
  7. }  


[java] view plaincopy
  1. Package b;  
  2.   
  3. Class B  
  4.   
  5. {  
  6.   
  7.   //要想访问A类,必须使用a.A ,带包名的格式。而且A必须是公共的。  
  8.   
  9. }  


类的修饰符: 一个是默认的修饰符,一个是public

默认的在同一包中可以访问,在不同包中不可以访问,public可以在任何位置访问。

而对于类中的成员来说(方法或者数据)

                          Public         protected           default   private

同一个类中         ok               ok                         ok           ok

同一个包中       ok                 ok                         ok           no

子类中              ok                  ok                          no          no

不同包           ok                     no                         no            no


 

当某个类所在包的包名很长的时候,在另外一个类中定义的它的时候就非常麻烦了,因为必须要加上包名去定义。为了简化类名书写,使用一个关键字,import。

在导入之后,这个类中调用其他包中的类时候,就可以省略这个包名了。使用*可以将当前目录下的类都导入到当前类中。但是import  * ;仅仅能到入当前指定目录下的类,而不能将这个目录下的子目录下的类导入。

当导入不同包下的类重名的时候,使用这两个类的时候,必须加相应的包名。

 

Jar包:

当把java打成jar包之后,其中的.class的父目录就变成了jar所在的目录。将classpath设置成jar的路径就可以去运行这个。

jar包放到classpath的路径下,这个jar包中的类你就都能用。

解释JDK中为什么有lib文件,lib下有相应的jar文件:对于javac这个编译器来说,它其实也是使用java编写的一个编译器,它的执行要调用某些类,而这些类就存放在lib目录下,在JDK中为什么要包含一个JRE呢,由于java编译器要将自身的类交给虚拟机运行,所以必须要有运行时候的环境,以执行虚拟机。

0 0
原创粉丝点击