Java面向对象-接口
1. 接口
接口是抽象方法和常量值的定义的集合,是一种特殊的抽象类
接口内所有的方法都是抽象方法,且都是public的!
接口 天生是用来被继承的,而不是用来被实例化的
1) 定义接口
<modifier> interface <name>{
}
2) 实现接口
注意,因为接口内方法都是public的,所以在具体实现时,子类中实现的时候,也必须都是public的!(子类访问权限要大于等于父类的权限)
【注意:子类在实现的时候,一定要加public,否则会报错】
3) 默认方法
在JAVA8中,接口增加了默认方法:为了解决新增修改与现有实现类冲突的问题
4) 抽象类与接口对比
代码块:
接口:
public interface IUnionPay { // public abstract boolean checkPwd(String input); // 因为接口是一个特殊的抽象类,他里面的所有方法都是抽象方法,所以也可以简写为,系统会默认其是抽象方法 /** * 校验密码 * @return 是否验证成功 */ boolean checkPwd1(String input); /** * 取钱 * @return 是否取款成功 */ boolean drawMoney(double money); /** * 查询余额 * @return 返回余额 */ double getBalance(); }
接口实现implements:
// 接口实现-implements public class CBCATM implements IUnionPay{ public Card card; public void setCard(Card card){ this.card = card; } @Override public boolean checkPwd1(String input) { if(input.equals(card.getPwd())){ return true; } return false; } @Override public boolean drawMoney(double money) { if (money<= card.getBal()){ return true; } return false; } @Override public double getBalance() { return card.getBal(); } }
通用类:
public class Card { private String bank; private String pwd; private Double bal; public Card(String bank, String pwd, Double bal) { this.bank = bank; this.pwd = pwd; this.bal = bal; } public String getBank() { return bank; } public String getPwd() { return pwd; } public Double getBal() { return bal; } public void setBank(String bank) { this.bank = bank; } public void setPwd(String pwd) { this.pwd = pwd; } public void setBal(Double bal) { this.bal = bal; } }
调用:
import java.util.Scanner; public class InterfaceTest { public static void main(String[] args) { CBCATM atm=new CBCATM(); Card c=new Card("CBC","123456",5000.0); atm.setCard(c); System.out.println("请输入密码:"); Scanner sc = new Scanner(System.in); String input = sc.next(); if (atm.checkPwd1(input)){ System.out.println("请输入提款金额:"); double money = sc.nextDouble(); if (atm.drawMoney(money)){ c.setBal(c.getBal()-money); System.out.println("取款成功,剩余金额:"+c.getBal()); }else { System.out.println("余额不足,退出"); } }else{ System.out.println("密码不对"); } } }