Java中的接口与抽象类的区别

抽象类

抽象类的作用与C++类似,不能实例化。只能通过子类继承,再进行实例化。一般是为了确定一种统一的抽象格式。

// 定义的抽象类
abstract class AbsClass{
	abstract void myName(); // 一个抽象方法
	
	void print(){
		System.out.println("play method !");
	}
}

// 继承并实现抽象方法
class myClass1 extends AbsClass{
	void myName(){
		System.out.println("class1");
	}
}

class myClass1 extends AbsClass{
	void myName(){
		System.out.println("class2");
	}
}

class Test{
	// 实例化
	myClass1 c1;
	myClass1 c2;
	// 测试
	public static void main(){
		c1.myName();
		c1.print();
		c2.myName();
		c2.print();
	}
}

接口

接口是一种方法的抽象,而不是类。

interface Method1{
	abstract void print();
}

interface Method2{
	abstract void show();
}

// 同时实现两个方法
class myClass1 implements Method1,Method2{
	void print(){
		System.out.println("print class 1");
	}
	
	void show(){
		System.out.println("show class 1");
	}
}

class myClass2 implements Method1,Method2{
	void print(){
		System.out.println("print class 2");
	}
	
	void show(){
		System.out.println("show class 2");
	}
}

class Test{
	myClass1 c1;
	myClass2 c2;
	
	public static void main(){
		c1.print();
		c1.show();
		c2.print();
		c2.show();
	}
}

二者的区别与联系

举一个很经典的例子,也在其他教程中非常常见的例子。假设有一个抽象类,表示门

abstract class Door{
    public abstract void open();
    public abstract void close();
}

现在,假设我们要实现一个防盗门的实例,仅需要继承并且实现这个抽象类即可:

class AntiTheftDoor extends Door{
    public void open(){
    //  一些实现方法
    }
    public void close(){
    // 一些实现方法
    }
    /*
    ···一些其他属性
    */
}

如果使用接口的话,可以这样定义:

interface Door{
    public abstract void open();
    public abstract void close();
}

之后进行方法的实现:

class AntiTheftDoor implements Door{
    public void open(){
    //  一些实现方法
    }
    public void close(){
    // 一些实现方法
    }
    /*
    ···一些其他属性
    */
}

如果我们想要一个门添加报警的方法,有下面几个选项:

  1. 直接在抽象类中声明一个报警方法,但是不是所有的门都需要这个方法。
  2. 在方法中添加一个报警功能,但是不是所有有报警功能的东西都是门,比如说放到警报。

正确的实现方法应该这样:

// 门的抽象类
abstract class Door{
    public abstract void open();
    public abstract void close();
}

// 报警的抽象方法
interface Alarm{
    void alarm();
}

class AntiTheiftDoor extends Door implements Alarm{
    public void open(){
    //  一些实现方法
    }
    public void close(){
    // 一些实现方法
    }
    void alarm(){
    // 一些实现方法
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值