抽象类:
1.用abstract关键字来修饰一个类时,这个类叫抽象类,用abstract来修饰一个方法时,该方法叫抽象方法。
2.含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。
3.抽象类不能被实例化。
4.抽象方法只需要声明,而不需要实现。
接口:
1.接口是抽象方法和常量值的定义的集合。
2.从本质上讲,接口是一种特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
3.接口中常量通常定义为static final的。
接口的特性:
1.接口可以实现多重实现,而继承只能是单继承。
2.接口中声明的属性默认为public static final(为什么是static的,因为接口本质上是一个抽象类,但是抽象类并不能实例化),也只能是public static final的。
3.接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的。
4.接口可以继承其他的接口,并添加新的属性和抽象方法。
5.多个无关的类可以实现同一个接口。
6.一个类可以实现多个无关的接口。
7.与继承类似的是,接口与实现类之间存在多态性。
8.class A extends B implements C , D
代码
package com.jack;
/**
* 抽象类
* 抽象类中可以没有抽象方法,但是含有抽象方法的类必须为抽象类
*/
public abstract class Test {
public int a;
//抽象方法,抽象方法只需要声明,不需要实现
public abstract void getA();
public static void main(String[] args) {
/**
*错误,抽象类是不可以被实例化的
*所以抽象类必须要被继承,抽象方法必须被重写
*/
Test t = new Test() ;
}
}
package com.jack;
public interface Test{
//在此处,变量是不可以声明为private的,因为接口需要被实现
//所以在接口中只能是public static final的,并且只能声明常量,而不能是变量
//只能是static的是因为他无法被实例化,所以只能是静态的
//常量中声明
public static final int a = 1;
abstract void get();
public static void main(String[] args) {
//接口与实现类之间存在多态性
Test t1 = new B();
Test t2 = new C();
System.out.println(Test.a);
}
}
interface A extends Test{
//接口可以继承其他的接口,添加新的属性和方法
int b = 2;
}
/**
* 多个类可以实现同一接口
*/
class B implements Test{
@Override
public void get() {
}
}
class C implements Test{
@Override
public void get() {
}
}
/**
* 一个类可以实现多个接口
*/
class D implements Test, A{
@Override
public void get() {
}
}