类和接口的概念
类的概念:是一组共同属性和方法的集合;
接口的概念:是一组功能的集合,也就是方法的集合;
接口不能定义普通成员变量,只能定义方法,且方法是抽象的;
类的定义:使用关键字class; 定义格式: public class 类名{}
接口的定义:使用关键字interface; 定义格式:public interface 接口名{}
接口中的成员变量:接口中可以定义成员变量,但是变量必须有固定的修饰符修饰;public static final修饰的接口中的变量也是常量,其值不能改变;在开发中不在接口定义成员变量。
接口中的成员变量定义格式:public static final 数据类型 成员变量名 = 值;
接口的方法定义格式:public abstract 返回值类型 方法名();
// 定义一个接口Person,里面有抽象方法show()
// An highlighted block
public interface Person{
//声明抽象方法
public abstract void show();
}
类于类之间的关系:
继承,而且是单继承,不支持多继承;一个子类,只能有一个父类;
接口于接口的关系:
继承,但是可以多继承;一个子接口可以有多个直接父接口;
类和接口的区别并不大:
(1)它们的源文件名都是文件名.java;
(2)经过编译后的文件都是字节码文件–文件名.class;
接口的特点
(1)接口可以继承接口;
(2)java支持一个类同时实现多个接口,或一个接口同时继承多个接口;
(3)类可以在继承一个类的情况,再实现多个接口;
(4)接口与父类的功能可以重复,均代表具备某种功能,并不冲突;
接口能创建对象吗?
不能;都是抽象的方法;
接口的作用:天生作为父接口被子类继承;
面试题:java到底支不支持多继承
如果是类与类,不支持多继承,支持多重继承;
如果是接口与接口,支持多继承,也支持多层继承;
类与接口之间叫什么?
**不叫继承,叫实现,可以多实现;**是类实现接口!!!
实现和继承差不多,实现是类把接口中的抽象方法拿过去;
实现类必须重写接口中的所有的抽象方法,实现类才能实例化对象;否则,实现类只是抽象类!!!
下面展示一些 内联代码片
。
// 定义接口Inter1,Inter2
public interface Inter1 {
//成员变量
public static final int name = inter1;
//抽象的成员方法
public abstract void show1();
}
public interface Inter2 {
//成员变量(也是常量,其值不能改变)
public static final int name = inter2;
//抽象的成员方法
public abstract void show2();
}
//定义接口Inter3继承Inter1,Inter2
public interface Inter3 extends Inter1,Inter2 {
public abstract void show3();
}
//定义一个实现Inter类来实现Inter3接口
public class Inter implements Inter3 {
//要么加abstract;要么重写方法;我们开发中在实现类中都是重写方法
//实现类重写完接口中所有的抽象方法,才能实例化对象;否则不能创建对象
//重写show1()方法
public void show1() {
System.out.println("这是show1()方法");
}
//重写show2()方法
public void show2() {
System.out.println("这是show2()方法");
}
//重写show3()方法
public void show3() {
System.out.println("这是show3()方法");
}
}
开发中最常用的模式:
一个类继承一个抽象类,同时实现多个接口;
public class A extends AbstractB implements Interface1, Interface2 {
//A必须重写抽象类的所有抽象方法,已经接口的所有抽象方法,才能实例化,否则类A还是抽象类
}
接口与抽象类的区别
相同点
(1)都不能创建对象;
(2)都位于继承的顶端,用于被其他类实现或继承
(3)实现类/子类都必须重写所有的抽象方法,才能够创建对象;
区别
(1)抽象类使用关键字abstract,接口使用关键字interface;
(2)抽象类中可以有抽象方法,也可以没有抽象方法;接口只能有抽象方法,不能有非抽象方法;
(3)抽象类可以定义任意成员变量,接口的成员变量只能使用public static final修饰;
(4)类与抽象类之间是单继承,类与接口之间的关系可以是多实现;
(5)抽象类作为父类,父类必须定义整个继承体系的共性内容;接口中定义的是整个继承体系外额外扩展的功能;
二者的选用
优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能的时候才选用抽象类;