Java基础笔记(13)—— Java抽象类和接口的区别

Java基础笔记(13)—— Java抽象类和接口的区别

Java抽象类和接口的区别

一.抽象类

1.abstract修饰的类为抽象类(没有对象,不能用new此关键字来创建抽象类的对象从而进行实例化);
2.abstract修饰的方法为抽象方法(不能有方法体);
3.有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;
4.抽象类中的抽象方法必须在子类中被重写。
代码举例:
创建Car抽象类,并定义抽象方法

package AbstractTest;

public abstract class Car {
	public abstract void drive();
	public abstract void type();
	public void Look(){
		System.out.println("看上去是辆车");
	}
}

创建BMW子类继承Car抽象类,需要重写父类抽象方法,其他方法不需要重写;也可以创建子类本身的方法

package AbstractTest;

public class BMW extends Car{

	@Override
	public void drive() {
		// TODO Auto-generated method stub
		System.out.println("适合山路越野");
	}

	@Override
	public void type() {
		// TODO Auto-generated method stub
		System.out.println("宝马X5");
	}
	
	public void price(){
		System.out.println("特别贵");
	}

}
二.接口

1.通过interface关键字修饰的类;
1.接口中的属性默认为:public static final ****;
2.接口中的方法默认为:public abstract ****;
3.接口不用关键字 extends去“继承”,而是用 implements 去“实现”,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫做A类继承了B类,其中B类即为A类的父类)。
代码举例:
创建接口:

package InterfaceText;

public interface Drive {
	public static int a = 1;
	public static int b = 2;
	public void ioDrive(int i);
}

package InterfaceText;

public interface Type {
	public abstract void ioType();
}
package InterfaceText;

public interface Look {
	public void ioLook();

}

创建接口的实现类:

package InterfaceText;

public class BMW implements Drive,Type,Look{

	@Override
	public void ioLook() {
		// TODO Auto-generated method stub
		System.out.println("买不起太贵了");
	}

	@Override
	public void ioType() {
		// TODO Auto-generated method stub
		System.out.println("看上去是辆宝马");
	}

	@Override
	public void ioDrive(int i) {
		// TODO Auto-generated method stub
		System.out.println("速度很快");
	}

}
三.联系

1.抽象类和接口都不能被实例化;
2.抽象类和接口都位于继承顶端,用于被其他类进行实现和继承;
3.抽象类和接口都可以包含抽象方法,实现接口或继承抽象类的子类都必须实现这些抽象方法。

四.区别

1.接口: 只包含抽象方法、静态方法和默认方法,不能为普通方法提供方法实现(接口中的普通方法默认为抽象方法);
抽象类: 可以完全包含普通方法;

2.抽象类中的成员变量可以定义普通成员变量,也可以定义静态常量(public static final 赋值),而接口中的成员变量只能是静态常量(public static final 类型的),并且必须赋值,否则通不过编译

3.接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

4.接口: 不能包含初始化块,抽象类: 可以包含初始代码块

5.类的继承是“单继承”,可以“多对一”,但是不允许“一对多”。而一个类却可以同时实现多个接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值