java中的抽象类与接口是java中的重要组成部分,也是面试中常见的题目,同时,java也叫面向接口编程的语言,因而我们今天主要讲其定义,为什么使用,两者的区别以及他们的主要点。
1定义
1.1抽象类:被abstract修饰的类叫做修饰类---抽象方法:被abstract修饰的方法
abstract class ClassName{}
1.2接口:一系列方法的声明叫做接口,由关键字interface修饰
interface interfaceName{}
2为什么要使用
java中不是有了类了吗,为什么还要用接口呢?记住:java的类之间是单继承的,像其他语言有多继承,为了解决多继承的问题,java的创建者弄出了接口,让一个类继承多个接口;同时,接口将方法抽象出来,方法的申明与实现分离开来,符合软件的设计原则,而实现的方法可以有多种;当有部分方法是公用的时候,我们可以用抽象类,因为抽象类中的方法有的是已经实现的,有的是声明一个方法,当一个子类继承这个抽象类的时候,不仅可以可以按自己的方式实现抽象方法同时也继承了已经实现的方法
3相同
3.1两者都不能实例化:有抽象方法的话,如果你实例化了,去调用一个没有实现的方法有意义吗?
3.2都能包含抽象方法
4不同点
4.1接口中包含的方法全部是抽象方法,抽象类部分方法不是抽象方法
4.2一个类可以实现多个多个接口,但只能单继承一个类
5注意点:
5.1接口中的方法虽然是抽象方法但是abstract关键字被省略了,接口中只有常量,被关键字static final修饰,默认省略不写
5.2抽象类如果要实例化可以让其子类创建对象
5.3abstract与final不能同时使用:final修饰的方法不能被重写,既然不能被重写,继承他一个声明不能实现有个鬼用!一个成员变量被final修饰的话就是常量,必须赋予初值;如果一个方法的参数被final修饰,则其值不能改变了
5.4一个抽象类不一定有抽象方法,但是一个类有抽象方法的话必定是抽象类
ok,知识点讲完了,老规矩,上代码去理解
//抽象类
public abstract class AbstractTest {
//抽象f方法:只申明方法,不去实现
public abstract void test();
//抽象类中不一定只有抽象方法,这个是非抽象方法
public void play(){
System.out.println("abstract class play");
}
}
//接口A
public interface InterfaceA {
//接口中的常量被static final 修饰,但可以省略不写
public int NUM=3;
/*
* 接口中的抽象方法:abstract关键字省去了,只申明方法
* */
public void interAPlay();
}
//接口B
public interface InterfaceB {
/*
* 接口中的抽象方法:abstract关键字省去了,只申明方法
* */
public void interBPlay();
}
//继承抽象方法,与实现接口的子类
public class Son extends AbstractTest implements InterfaceA,InterfaceB{
@Override
public void test() {
System.out.println("实现抽象父类的抽象方法");
}
@Override
public void interAPlay() {
System.out.println("实现接口A的抽象方法");
}
@Override
public void interBPlay() {
System.out.println("实现接口B的抽象方法");
}
}
//测试类
public class Test {
public static void main(String[] args) {
Son son=new Son();
son.play();
son.test();
son.interAPlay();
son.interBPlay();
//抽象类要实例化可以借助其子类
AbstractTest test=new Son();
test.play();
test.test();
//接口要实例化同样借助其子类
InterfaceA a=new Son();
a.interAPlay();
}
}
分析代码:
1继承类用extends,实现接口用implements,多个接口直接用逗号隔开
2子类必须实现接口的方法
3在测试类中抽象类与接口创建实例的方法要注意,在以后的工作中我们会常常用到
ok今天就讲到这里,还有一些类的特性我么明天补充完整,然后讲一个常用的类:字符串类String