java抽象类与接口实例源码介绍。
首先是抽象类:
是一种特殊的类,请注意,它是类!用abstract修饰。
它里有可以有未实现的方法,也可以有已实现的方法。未实现的方法,要用abstract修饰。已实现的方法,和普通的类中的方法没有区别。
它不能被实例化,只能被继承。
下面看一个例子
package wzq.j2se;
public abstract class Abstract1 {
public void af1(){
System.out.println(“Abstract1-af1″);
}
public abstract void af2();
public static void main(String[] agrs){
Abstract1 a1 = new Abstract2();
a1.af1();
a1.af2();
}
}
class Abstract2 extends Abstract1{
@Override
public void af2() {
System.out.println(“Abstract2-af2″);
}
//试试这儿,覆盖和不覆盖有什么区别!
public void af1(){
System.out.println(“Abstract2-af1″);
}
}
可以看到,如果我们new Abstract1()编译就会报错:“不能实例化这个类型!”
而关于继承的规则,它和普通的类继承基本一样。调子类和父类的方法,关键是看new的是子类还是父类,也就是说这个对象的类型决定了调用哪个类里面的方法。
值得注意的是,一但继承了它,就必须实现里面的未实现的方法。为什么要这样呢?我认为最有可能是这个原因:
如果子类不实现它的抽象方法,那么当new出来的子类对象调用到这个方法的时候,会出现什么情况?在子类和父类均未实现这个方法的情况下,你叫java虚拟机情何以堪?
简而言之,如果子类和父类都没实现这个方法,无论new出来的对象是谁,调用这个方法显然是不符合逻辑的。
所以说,子类一定要实现父类未实现的方法。在java的语法中,只有抽象类和接口有未实现的方法,而且,这两者都要求子类实现未实现的方法。
然后是接口:
一个类里面,全是未实现的方法。它不是class,而是interface!
由于它里面的方法全是未实现的方法,所以就不用多此一举,像抽象类一样给未实现的方法加个标识了。
public interface inter1{
public void fun1();
}
以上就是一个完整的接口声明。
它基本和抽象类一样,最大的区别就是,它里面的方法全是未实现的,而且抽象类用extends而接口用implements.
接口的变量只能 public static final 修鉓,方法只能用abstract和public修鉓。因为接口是公用的,所以不可能有私有的变量和方法。
而抽象类,保留了类的大部份基本属性,也就是说,私有,公有都可以用。我们在抽象类里面写一个private int a;是完全没有问题的!
类只可以继承一个,而接口可以实现多个!