Java抽象类与接口

目录

抽象类与抽象方法

抽象方法

抽象方法定义格式

方法定义格式

抽象类

抽象类定义格式

类定义格式

总结实例

接口

接口定义格式

抽象类定义格式

接口与抽象类的区别

接口与抽象类的相同点

接口的实现

抽象类与接口的选择

接口新特性

JDK8新增的方法

JDK9新增的方法


抽象类与抽象方法

抽象方法

只有方法的声明,没有任何代码的实现。用abstract修饰符进行声明。它告诉编译器,派生类必须通过重写该方法以提供它们自己的实现。

抽象方法定义格式

方法定义格式

抽象类

含有一个或一个以上的抽象方法的类。

抽象类定义格式

类定义格式

·抽象类中可以包含有一般方法,也可以包含有抽象方法

·抽象类只能作为基类,它本身不能实例化

·如果抽象类的子类不能实现所有的抽象方法,那么子类也必须定义为抽象类。即抽象类派生的非抽象类子类,必须实现所有抽象方法

总结实例

public abstract class ElectricityCharge {

	protected int dushu;
	public ElectricityCharge(int dushu){
		this.dushu=dushu;
	}
	public abstract double charge();
}
public class ElectricityChargeLackRain extends ElectricityCharge{

	public ElectricityChargeLackRain(int dushu){
		super(dushu);
	}
	public double charge(){
		if(dushu>150){
			return (dushu-150)*3.5*1.1+150*3.5;
		}else{
			return dushu*3.5;
		}
	}
}
public class ElectricityChargeOfRain extends ElectricityCharge {

	public ElectricityChargeOfRain(int dushu){
		super(dushu);
	}
	public double charge(){
		if(dushu>200){
			return (dushu-200)*2.25*0.9+200*2.25;
		}else{
			return dushu*2.25;
		}
	}
}
public class Test {

	public static void main(String[] args) {
		ElectricityChargeOfRain e1 = new ElectricityChargeOfRain(300);
		System.out.println("丰水期电费为:"+e1.charge());
		ElectricityChargeLackRain e2 = new ElectricityChargeLackRain(230);
		System.out.println("枯水期电费为:"+e2.charge());

	}

}

接口

接口可以实现多继承,类只允许单继承

接口定义格式

抽象类定义格式

接口与抽象类的区别

接口

·只包含常量及抽象方法(JDK7之前)

·成员默认为public的

·变量默认都是final的

·抽象方法可以不加abstract,默认abstract

抽象类

·可以包含有一般成员,也可以包含有抽象方法

·成员可以是私有的、受保护的、内部的或公有的

·可以包含非fina的变量

·抽象方法一定要加abstract

接口与抽象类的相同点

只能被继承,不能实例化。

接口的实现

tips

·一个类可以实现多个接口,在implements后列出需要实现的接口名。

·如果某个类不是abstract类型,那么类要实现该接口的所有抽象方法。

·在类中实现接口的抽象方法中,必须与接口中定义的方法头完全一致,即方法名、返回值类型及形参列表要完全一致。如果方法名相同,但参数不同,则不是实现接口的抽象方法,而是定义新的方法。

抽象类与接口的选择

·抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。

·抽象类多定义对象的属性,而接口多定义对象的行为。

接口新特性

·JDK7以前:接口中只能定义抽象方法

·JDK的新特性:接口中要以定义有方法体的方法。(默认、静态)

·JDK9的特性:接口中可以定义私有方法。

·原因:只要接口中增加新的抽象方法,所有的实现类必须跟着改变,否则实现类会报错。

·解决方法:在接口中增加有方法体的方法,实现类中不需要进行重写实现该接口。

·使用场景:接口升级

JDK8新增的方法

默认方法,使用default修饰

作用:接口升级

tips:

·默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写时去掉default关键字。

·public可以省略,default不能省略。

·如果实现了多个接口,多个接口中存在相同名字的默认方法,实现类必须对该方法进行重写。

静态方法,使用static修饰

tips:

·静态方法只能通过接口名调用,不能通过实现类名或对象名调用。

·public可以省略,static不能省略。

·静态方法不能重写,但实现类中可以写一个同名的静态方法。

JDK9新增的方法

私有方法

·普通私有方法,用于封装默认方法中的重复代码。

·静态私有方法,用于封装静态方法中的重复代码。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值