接口和抽象类

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 interface Car extends Vehicle, FourWheeler {
	@Override
    default void print(){
        System.out.println("我是一辆四轮汽车!");
    }
}

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

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

继承:

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

接口中方法的类型

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

注意:

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

抽象类

继承:

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

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

抽象类中的方法:

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

抽象类和接口

相同点:

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

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

不同点:

主要是类和接口的区别:(继承关系,构造器,接口成员属性public)

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

多态

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值