1、Java接口详解
关键字interface,类中修饰符(public,private)省略后默认为private;在接口中只能定义为public(默认),接口对外公开,接口中的方法只能声明,不能实现。

public interface PCI {
    //定义方法,只有声明,没有实现!
    public void start();
    public void stop();    
}

接口不能实例化,接口中定义的方法在不同的地方被实现,实现完全不同的行为;接口可以作为一种数据类型来使用:

PCI pci=new SoundPCI();
pci.start();

利用接口实现多态:
1、接口
2、实现该口的实现类
3、定义接口类型,又该实现类为其赋值

接口与类继承区别

  • 类的继承

优点:代码复用
缺点:局限于将来的扩展必须为该类

  • 接口

优点:程序的扩展性大大加强
缺点:没有了代码复用

几个类代码总体相同,共同属性抽象到父类,共同接口抽象到接口:

class ClassA extends ClassB implements IA,IB...

2、Java中的接口与抽象类区别
抽象类:一个未定义完整的类,其中的抽象方法延迟到它的子类中实现。
抽象类 + 子类实现的方法 == 完整的类

1、一个抽象类可不可以没有抽象方法?可以,但该类没任何存在意义;
2、一个抽象类中可以有多个抽象方法;
3、抽象方法一定不能有实现;
4、普通类中不允许存在抽象方法;

5、抽象类中的子类一定要实现抽象类中的抽象方法?
如果抽象类的子类没有实现抽象类中的抽象方法,那么改子类必须为抽象类;
6、接口的实现类一定要实现接口中的方法?
如果接口的实现类没有实现该接口定义的方法,那么该类必须定义为抽象类;
7、接口可以继承吗?可以

3、Java语言中的Static与final关键字用法

static关键字

可以修饰一个方法:静态方法
可以修饰一个字段:静态字段
可以修饰一个类:静态类(少用)

主要指的是类的方法或类的属性,通过:类名.方法/字段 | 实例.方法/字段

一个类的静态字段或静态方法,能够被其他类共享!

public class Classa{
    public int a=10;
    //public static int a=10;
}
...
main(){
    ClassA a1=new ClassA();
    ClassA a2=new ClassA();
    a1.a=11;
    //对象a1,a2不影响!
    //加static后,只分配一个共享空间
    System.out.println(a2.a);
}


//初始化块
public int a = 10;
{
    a=11;
    System.out.println("块的代码...");
}


//静态初始化块
public static int a = 10;
static{
    a=11;
    System.out.println("块的代码...");
}

执行顺序:静态初始化块》初始化块》构造函数.

final关键字

  • 被final修饰的类

该类不能被子类化(保障安全);
final类中的所有方法都默认为final;

  • 被final修饰的方法

该方法不能被覆盖;
final方法无需支持动态绑定,因此效率更高;

  • 被final修饰的变量/属性是一个常数

final变量只能设置一次,但赋值可以在声明之外单独出现,此变量称为空final变量;
在使用空final变量/属性使用前,必须先设值;
空final实例属性必须在构造器或代码块中设值;

4、Java内部类、局部类与匿名内部类
内部类:类的内部定义一个类

public class ClassA {
    public class ClassChild{
        ...    
    }
}
ClassA.ClassChild classChild=new ClassA().new ClassChild();

局部内部类:方法的内部定义一个类

匿名内部类:


//类的定义创建同时完成,无需知道类的名称
//1、接口
IA a=new IA(){
    @Override
    public void funcA() {
    System.out.println("funcA");
    }
};
a.funcA();


//2、抽象类
ClassA classA=new ClassA() {
@Override
public void Test() {
        ...        
    }
};


//3、类的继承
 ClassA classA=new ClassA() {
@Override
public void Test() {
        ...        
    }
};

总结(接口与抽象类)
(1)相同点:
都可以定义抽象的类;
(2)区别:
1、接口可以多重继承,抽象类不可以;
2、接口可以定义方法,抽象类可以实现部分方法;
3、接口中基本数据类型的数据成员,默认为static和final,抽象类则不是;
。。。

标签: none

评论已关闭