接口、多态
接口是Java语言中的一种引用类型,是方法的集合
接口内部主要封装了方法,包含抽象方法,默认方法,静态方法
定义格式:
public interface 接口名{
//抽象方法
//默认方法
//静态方法
}
接口的使用,它不能创建对象,但是可以被实现(implements,类似于被经常)
public interface JieKou1 {
public abstract void Print();//抽象方法 在继承类中实现其方法
//静态方法
public static void run(){
System.out.println("接口中的静态方法");
}
public static void run1(){
System.out.println("run1方法");
}
//默认方法在实现类中可以修改方法(重写)
public default void Print1(){
System.out.println("接口内的默认方法");
}
}
public class Realize implements JieKou1{
//抽象方法的实现
public void Print(){
System.out.println("实现接口抽象类方法");
}
//默认方法的直接调用(直接调用则不需要些该方法体)或者重写
//下面例子是重写Print1()
public void Print1(){
System.out.println("重写接口内的默认方法");
}
//接口的静态方法无法修改
public static void run(){
System.out.println("静态run方法");
}
}
public class Hello {
public static void main(String[] args) {
Realize jieKou2 = new Realize();
jieKou2.Print();
jieKou2.Print1();
/*实现类中并没有重写其run1的静态方法
在Realize中无法调用run1方法(报错)
用接口名调用run1方法才可以
Realize.run1();
*/
JieKou1.run1();
}
}
接口的多实现,以及接口与父类知识
1、多个接口中有重名抽象函数,在其实现类中只需要重写一次
2、默认方法有重名的,必须重写一次,不然程序报错
3、接口中出现重名的静态方法并不冲突,因为可以用接口名调用其静态方法
4、优先级问题,一个类既有父类也继承了多个接口,则就近原则选着父类的同名方法
interface A{
public abstract void run();
public abstract void run1();
public default void Method1(){}
public default void Method2(){
System.out.println("A接口的Method2方法");
}
}
interface B{
public abstract void run();
public abstract void run2();
public default void Method1(){}
public default void Method3(){}
}
class D{
public void Method2(){
System.out.println("父类中的Method2方法");
}
public void M(){
System.out.println("aaa");
}
}
class C extends D implements A,B {
//多个接口中有重名抽象函数,在其实现类中只需要重写一次
public void run(){
System.out.println("多个父接口中有重名抽象函数只需要重写一次");
}
@Override
public void run2() {
System.out.println("run2");
}
@Override
public void run1() {
System.out.println("run1");
}
//默认方法有重名的,必须重写一次,不然程序报错
public void Method1(){
System.out.println("必须重写一次多接口重名的默认方法,不然报错");
}
}
public class JKandFLei {
public static void main(String[] args) {
C c = new C();
//就近原则 选着父类同名方法执行
c.Method2();
//向上转型
D d=new C();
d.M();
//向下转型
C c1=(C)d;
c1.M();
}
}