接口是一种抽象的数据类型,它定义了一组操作和属性,而不关心具体实现方式。接口可以用来实现多态,一个类可以实现多个接口,从而具有多个不同的行为。 以下是关于接口的一些重要知识点: 1. 接口定义:接口使用关键字`interface`来定义,可以包含常量和抽象方法。接口可以被其他类实现,一个类可以实现多个接口。 2. 实现接口:一个类实现接口时,需要使用`implements`关键字,并且需要实现接口中所有的抽象方法。实现接口的类可以自定义其他方法和属性。 3. 接口与类的关系:接口是一种规范,类是对规范的具体实现。一个类可以继承另一个类,但可以同时实现多个接口。 4. 接口的多态性:接口可以用来实现多态,通过接口引用来调用实现类的方法。这样可以在运行时动态确定使用哪个具体实现类的方法。 5. 接口的默认方法:接口可以定义默认方法,使用`default`关键字。默认方法可以在接口中给出默认的实现,实现类可以选择是否重写。 6. 接口的静态方法:接口可以定义静态方法,使用`static`关键字。静态方法在接口级别上提供了一些工具方法。 7. 接口的继承:接口可以继承其他接口,使用`extends`关键字。这样子接口会继承父接口的抽象方法和默认方法。 8. 接口的应用:接口是一种重要的设计模式,通过接口可以实现代码的解耦和模块化,提高代码的可维护性和可扩展性。 以上是关于接口的一些基本知识,接口在面向对象编程中扮演了重要的角色,可以提高代码的灵活性和可重用性。 package lesson14; //接口使用Interface修饰,类使用class修饰 public interface InterfaceTest { //静态常量 //默认使用public static final修饰 int a = 10;//常量 //接口中没有构造方法 //InterfaceTest(); //抽象方法 //默认使用public absstract修饰 void mathod(); //jdk1.8之后接口中可以有非抽象方法了 default void doSomething(){} //静态方法 public static void saySomething(){} } //一个接口文件中可以包含多个接口和多个类 //可以有零个或一个由public修饰的接口 //而且public修饰的接口的名字要跟文件的名字一样 //public interface Test1{} //接口和接口之间是存在继承关系的,但是是多继承关系 //类和类之间存在继承关系,是单继承关系 interface Test2 extends Test3,Test4{} //接口和类之间没有关系 interface Test3{} interface Test4{} //类和接口之间是实现关系,使用implements关键字表示实现关系,而且是多实现关系 class Test5 implements Test3,Test4{} class Test6{} //一个类可以同时继承一个类实现多个接口,但是要求继承在实现之前 class Test7 extends Test6 implements Test3,Test4{} //类实现接口的时候需要重写接口中所有的抽象方法,否则要把该类定义成抽象类否则编译报错 class Test8 implements InterfaceTest{ public static void main(String[] args) { //接口也不能创建对象 //InterfaceTest test = new InterfaceTest(); //可以创建接口类型的对象,由实现类赋值 //接口也存在多态 InterfaceTest test = new Test8(); } @Override public void mathod() { } }
抽象类和抽象方法是面向对象编程中的概念,用于对类和方法进行抽象和定义。 抽象类是一个不能被实例化的类,只能被继承。抽象类通常用于定义一组相关的类的共同特征和行为。它可以包含抽象方法和非抽象方法。抽象类不能被直接实例化,只有通过继承抽象类并实现其中的抽象方法,才能创建一个实例。 抽象方法是一个没有具体实现的方法,只有方法的声明,没有方法体。抽象方法必须在抽象类中定义。子类继承抽象类后,必须实现父类中的抽象方法,否则子类也必须声明为抽象类。抽象方法用于约束子类必须实现一定的方法,但不关心具体的实现细节。 抽象类和抽象方法的主要特点和用途包括: - 抽象类和抽象方法用于对类和方法进行抽象和定义,可以提高代码的可读性和可维护性。 - 抽象类可以包含抽象方法和非抽象方法,提供一组共同的特征和行为,供子类继承和实现。 - 抽象方法只有方法的声明,没有具体的实现,通过子类实现具体的方法体。 - 抽象方法用于约束子类必须实现一定的方法,但不关心具体的实现细节。 - 抽象类不能被直接实例化,只能通过继承抽象类的子类来创建实例。 - 子类继承抽象类后,必须实现其中的抽象方法,否则子类也必须声明为抽象类。 - 抽象类和抽象方法用于建立类的继承关系,提供了一种多态的实现方式。 - Java中使用abstract关键字来定义抽象类和抽象方法。 package lesson14; /** * 如果一个方法只有存在的意义没有实现的意义,这个方法可以定义成抽象方法 * 包含抽象方法的类必然是一个抽象类 * * 抽象类存在的意义就是被继承,抽象方法存在的意义就是被重写 * 抽象类和抽象方法就是为多态服务的,所以抽象类和非抽象子类之间也存在多态性 */ public class Test { } //有抽象方法的类必然是一个抽象类 //抽象类使用abstract修饰 abstract class Father{ private int no; //抽象类中有构造方法 public Father(){ } //没有抽象的构造方法 //public abstract Father(int a){} //抽象类中可以没有抽象方法 public abstract void method(); //抽象类中可以有非抽象方法 public void doSomething(){} } //抽象类可以继承,但是包含抽象方法的抽象类,在继承的时候会报错,因为类中有抽象方法, //解决报错的方法有两种一个为将子类也定义成抽象类,另一个种是重写抽象类中所有的抽象方法 class Son extends Father{ @Override public void method(){ //抽象类不能创建对象 //Father father = new Father(); //但是可以创建抽象类类型的对象,由子类对象赋值 Father father = new Son(); } }