抽象类VS接口

抽象类VS接口

抽象类

抽象类:作为一个模板,由子类实现自己的具体功能。抽象类是一个跟类一样的结构,抽象类本质也是一个类
比如计算面积,提供一个抽象方法 计算面积公式,子类必须覆写,有各自自己的计算面积公式
包含:字段,构造方法,普通方法,抽象方法
支持多态的写法
**特点:

  1. 使用abstract 修饰的方法就是抽象方法没有方法主体;
  2. 抽象方法必须存于抽象类中[接口也可以],不能够放在普通类中
  3. 构造方法是私有的,不能实例化
  4. 抽象类的子类
    • 非抽象类必须覆写父类中的所有的抽象方法,
    • 抽象类不用覆写父类中的抽象方法**
class Abstract{
    public static void main(String[] args){
        System.out.println("");
    }
}
abstract class Animal{
	int i=1;
	void get(){}
	abstract void get1();//抽象方法不能有方法体 用;结束
}
class Person extends Animal{//非抽象类的子类,必须覆写父类的抽象方法
	void get1(){
		System.out.println("我是非抽象类子类的方法,我必须覆写");
	}
}
abstract class Pig extends Animal{//抽象类的子类,不用覆写父类的抽象方法
}

接口

接口:规定某一类事物必须具备某些功能,但不管类具体怎么实现这些功能

  1. 接口没有构造方法,也不能实例化
  2. 接口的方法全是抽象方法,默认public abstract修饰
  3. 接口只能继承接口,可以多继承,不能继承类
  4. 接口的字段全是全局静态常量,默认public static final修饰
  5. 接口的内部类都是静态的,默认修饰public static修饰

实现接口:支持多实现

  1. 格式:修饰符 class 类名 implements 接口1,接口2……
  2. 接口的实现必须在extends之后
  3. 实现(覆写)接口的方法必须使用public访问修饰符
  4. 接口不能创建实例,但是可以声明引用类型的变量 -->父类变量引用子类对象
public class Interface{
    public static void main(String[] args){
        Dog d=new Dog();//创建Dog的对象
		d.swim();//实现了ISwim的接口
		Animal a=d;//多态
		a.name="dog";//给父类赋值名字
		System.out.println(d.name);//
		IWalk w=d;//实现了ISwim接口
    }
}
interface IWalk{
	int i=1;
	void walk();
}
interface ISwim{
	void swim();
}
class Animal{
	String name;
}
class Dog extends Animal implements IWalk,ISwim{//多实现,实现必须放在extends之后
	public void walk(){
		System.out.println("四条腿跑");
	}
	public void swim(){
		System.out.println("狗刨式");
	}
}

抽象类VS接口的异同点:
相同点:
1.都位于继承的顶端,用于杯其他子类或接口实现或者继承
2.都不能实例化
3.都可以定义抽象方法,其非抽象子类必须覆写这些抽象方法
区别
1.接口没有构造方法,抽象类有
2.抽象类可以包含普通方法和抽象方法,接口只能包含抽象方法
3.一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口(接口弥补了java的单继承)
4.变量:接口里默认是public static final,抽象类默认是默认包访问权限
5.方法:接口里默认是public abstract ,抽象类默认是默认包访问权限
6.内部类:接口里默认是public static,抽象类默认是默认包访问权限
【接口中的方法如果被static和default修饰,可以有方法主体,不需要实现类去覆写,这是java1.8的特性】

二者的选用:
优先选用接口,尽量少用抽象类。若需要定义子类的行为,又要为子类提供共性功能时选用抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值