欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

接口和抽象类

时间:2023-08-02
default方法和static方法

Java8之前接口只能有抽象方法,使用public abstract修饰,final字段,使用public static final修饰;Java8 之后新增default方法和static方法;static方法可以在接口外使用接口名打点访问,default方法不行;
之前的Java继承中,由于实现子类中给出了具体的方法实现过程,对于两个接口相同的方法不会产生二义性;
如今加入了default和static方法这种已经实现的方法,相同的方法在类继承(实现implement)时必定会产生二义性;解决方法:

public interface Vehicle { default void print(){ System.out.println("我是一辆车!"); }}public interface FourWheeler {default void print(){System.out.println("我是一辆四轮车!"); } }

第一个解决方案是创建自己的默认方法,来覆盖重写接口的默认方法:

public class Car implements Vehicle, FourWheeler {default void print(){System.out.println("我是一辆四轮汽车!"); }}

第二种解决方案可以使用 super 来调用指定接口的默认方法:

public class Car implements Vehicle, FourWheeler { public void print(){ Vehicle.super.print();//只有接口可以使用 接口名称.super这种操作 } }

继承:

接口可以继承其他接口,但是不能继承抽象类

接口中方法的类型

• 抽象方法,默认修饰符 public abstract可省略
• default修饰的实现了的方法,public修饰符可省略
• static 修饰的实现了的方法,public修饰符可省略

注意:

 接口只能用:public 修饰,abstract可有可无;protected、private、static、fianl都不行(内部类是可以的,接口在这方面没有现在)
 接口中的方法,访问权限只能时public。
 接口中的字段,只能时public static final。

抽象类 继承:

可以extends所有类,implement接口;所有有点绝对了,final的不行啊

为了降低实现接口的难度,允许类只实现接口的一部分方法,为子类的继承起到承上启下的作用; 抽象类中的方法:

方法的修饰同普通类,是不能用default修饰的;

抽象类和接口 相同点:

接口和抽象类都不能被实例化;
接口和抽象类都包含抽象方法
接口只能继承接口,不含实现了的方法的抽象类也不能被接口继承;
抽象类可以implement接口,继承抽象类和普通类;

一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类

不同点:

主要是类和接口的区别:(继承关系,构造器,接口成员属性public)
1>如一个类可以实现多个接口,只能继承一个抽象类;
2>接口中不能定义构造器,抽象类中可以定义构造器;抽象类的构造器不是用来创建对象,而是让其子类调用完成抽象类的初始化操作;
3>接口中的成员全都是public 的,抽象类中的成员可以是 private、默认、protected、public;
4>接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 和static关键字修饰的非抽象方法
5>接口不能包含成员变量,除了 static 和 final 变量(接口中定义的成员变量实际上都是常量),抽象类中可以定义成员变量;
接口可以使用 接口名称.super访问其属性和方法;

多态

Java的多态怎么理解?·(1.父类引用指向子类实例+2.动态联编)
用父类引用引用子类实例,在调用子类方法时可以根据子类的不同而呈现出多态。
动态联编:对象头(标记字段,类型指针,数组长度(只有数组字段有))中的类型指针,找到对象实际类型在方法区的方法;

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。