1.接口
1.1简述:接口与抽象类相似,可看做一个更彻底的抽象类,二者都是位于顶层,未被实现接口只是起到了一个设计功能的作用
定义形式:
//定义一个接口
public inplements 接口名{
}
//定义一个类实现一个接口
public class 类名 interface 接口名{
}
//定义一个接口继承一个接口
public inplements 接口名 extends 接口名2
规定: 接口之中默认抽象方法的修饰符为 public abstract;
默认成员变量的修饰符为 public final,因此此成员变量被称为静态常量
在jdk8之后,允许在接口中定义静态成员方法和默认方法
public interface Aniamls {
int num=10;//默认成员变量类型为静态常量
void eat();
//静态方法只能同过接口名调用
public static void textstatic(){
System.out.println("textstatic");
}
//默认方法只能同过子类调用
public default void moren(){
System.out.println("moren");
}
}
静态成员方法通过接口名调用
默认方法通过子类或者子类创建的对象调用
public static void main(String[] args) {
Aniamls animal=new Animals();
//如果传过来的animals不是Dog类,则animals instanceof Dog返回false,反之返回true
if(animals instanceof Dog){
Dog dog=(Dog)animal;
//强制转换将父类对象animals转化为子类对象
dog.(Dog类独有的方法);
}
特性:
接口不能创建对象,无构造方法(与抽象类不同之处)
接口表示一种抽象,需要其他类来实现;
当类实现接口时,要么将类改为抽象类,要么实现抽象方法
当接口继承接口时,不需要实现抽象方法
类与接口相互关系:
一个接口可以继承多个接口
一个类可以继承多个接口
一个类只能继承一个类
2.final关键字
final关键字可以修饰属性方法,方法,类
特点:
1)final修饰类时,该类不能被任何类继承
例如,String默认修饰符为final,不能被任何类继承
public class Final extends String {
//String会发生报错,无法被继承
}
2)final修饰方法时,方法无法被重写
public class Final {
final void method(){
}
}
public class Car extends Final {
//下方的public void method(){}会发生报错,无法完成重写
public void method(){
}
}
3)final修饰的变量,在定义时需要对其赋值,复制之后将无法改变变量的值
如果定义时未赋值,则在构造方法中必须要对其赋值。
public class Final {
final int num=10;
final int age;
public Final(int age){
this.age=11;
}
}