Java面向对象_接口


  • 整理了一些Java面向对象的笔记,记录在这里 @Zeii

接口

接口类似于一种特殊的抽象类,但它不属于类。

  • 语法

public interface Fortune{
}

public class Gold implements Fortune{
}

特点:

  • 接口由interface声明,不再是类,不需要class
  • 能继承接口的只能是接口,类可以实现接口implements
  • 接口中所有变量都是全局静态常量public static final (一般不在接口中写变量)
  • 接口中所有的方法都是抽象方法,没有方法体,并且接口的所有内容都是public公共的。在声明方法时可以将public abstract省略不写
  • JDK1.8之后有个新特性,在接口的方法前面加上关键字default,可以写方法体
public interface Fortune{
    void value(); // public abstract省略不写
}

接口的实现

  • 因为接口所有的方法都是抽象方法,所以类在实现接口时,必须将接口的抽象方法实现(即重写)。
public class Gold implements Fortune{
    // 必须实现接口的方法
    public void value(){
        
    }
}
  • 接口同样具有多态性:接口可以理解为对抽象类的进一步抽象,类实现接口,和抽象类的继承基本上是一样的,同样可以向上造型。
Fortune wallet = new Gold(); // 向上造型

接口和类有什么区别

  • Java中类只能单继承,即一个类只能继承一个父类;
  • 但是可以实现多个接口。即单继承,多实现。
public interface manMade{ }
public interface Fortune{ }
public class Money{ }
// 单继承,多实现
public class RMB extends Money implements Forturn,manMade{ }

多态性

RMB rmb = new RMB();
Money mon = new RMB();   // 向上造型
Fortune fort = new RMB(); // 向上造型
manMade mad = new RMB(); // 向上造型
  • 注意

上面创建的对象中,rmb包含了RMB中所有的方法,都可以使用;但mon只能使用Money类中的方法;fort只能使用Fortune中的方法;mad只能使用manMade中的方法。要想使用RMB中的所有方法,可以先向下转型为RMB.

RMB new_mon = (RMB) mon;
  • 接口的主要作用,是把很多不相关的东西进行了整合

练习

实现两个数据库类Mysql和Oracle,根据用户的输入选择使用的数据库。

  • 类图
IDAO(接口)AbstractDaoSql
connect();
add();
del();
upd();
sel();
>add();
del();
upd();
sel();
>Mysql
connect();
—————
Oracle
connect();
这是Java中非常常见的一种设计方法:
接口包含所有的方法 --> 抽象类实现一部分方法 -->最终的类重写剩下的方法

接口IDAO包含数据库的所有操作,两个数据库相同的操作抽象为AbstractDao类,其实现了接口的一部分方法,而后数据库Mysql和Oracle继承AbstractDao类,各自实现自身的connect()方法。

  • 代码
public interface IDAO {  // 接口
	void connect();
	void add();
	void del();
	void upd();
	void sel();
}
public abstract class AbstractDAO implements IDAO {
	@Override
	public void add() {
		System.out.println("add");
	}
	@Override
	public void del() {
		System.out.println("delete");
	}
	@Override
	public void upd() {
		System.out.println("update");
	}
	@Override
	public void sel() {
		System.out.println("select");
	}
}
public class MysqlDAO extends AbstractDAO{
	@Override
	public void connect() {
		System.out.println("Mysql connect");
	}
}
public class OracleDAO extends AbstractDAO{
	@Override
	public void connect() {
		System.out.println("Oracle connect");
	}
}
// 测试
public class Client {
	public static void main(String[] args) {
		
		System.out.println("选择你要使用的数据库(1,Mysql  2,Oracle):");
		Scanner scn = new Scanner(System.in);
		int in = scn.nextInt();
		
		IDAO db = null;  // 声明
		
		if(in == 1) {
			db = new MysqlDAO();
		}else if(in == 2) {
			db = new OracleDAO();
		}else {
			System.out.println("输入有误!");
		}
		
		db.connect();
		db.add();
		db.del();
		db.upd();
		db.sel();	
	}
}

这样做代码结构层次分明,重复代码抽象化,减少了代码量。同时代码具有很高的可扩展性,如果加入新的数据库,只需要从AbstractDao继承,实现自己的connect()方法即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值