关于继承和实现
1、java中为什么要单继承多实现
多继承,那么当多个父类中 有重复的属性或者方法时,子类的 调用结果会 含糊不清,因此用了 单继承。
实现接口的作用:通过实现接口来 拓展了类的功能,
2、为什么接口中所有的属性都是public static final修饰的
public : 使接口的实现类可以使用这个常量
static : static修饰就表示它 属于类的,随着类的加载而存在的,如果是非static的话,
接口是不能建立对象的,所以
接口的常量必须是static
final : final修饰就是保证接口中定义的常量 不能被实现类所修改,如果没有final的话,由字类随意的进行修改的话,
3、继承和实现的区别
继承 : 如果多个类的 某个部分的功能相同,那么可以抽象出一个类出来,
相同的部分放进这个抽象类中,让他们都继承这个类。
实现 : 如果多个类 处理的目标是一样的,但是 处理的方式不同,那么就 定义一个接口,也就是一个标准,之后让他们实现这个接口,
各自实现自己具体的处理方法来处理那个目标
4、继承是什么,实现是什么
继承大白话可以把抽象类看成一个公用的模板,继承抽象类的子类目的是实现这个模板,比方说,抽象类有个叫声的抽象方法,那该方法为模板,而继承这个模板的方法可以有很多,比如喵喵(猫叫),吱吱(老鼠叫)等等。
实现的作用可以看成添加功能
利用继承和实现实现一个银行的实例:
interface Overdraft //透支限制
{
void show();
}
abstract class Account
{
String ID;
double rate;
//double balance;
abstract void bankAccountNumber();
abstract double getMoney(double a ); //取款
abstract double setMoney(double a); //存款
abstract double yue();
}
class Debit extends Account //借记卡
{
double balance=10000;
void bankAccountNumber()
{
ID ="45387874385793384";
rate = 0.54;
System.out.println("借记卡账号:"+ID);
System.out.println("借记卡利率:"+rate);
System.out.println("余额:"+balance);
}
double getMoney(double a) //借记卡取款
{
if (a<=10000) {
balance = balance -a;
System.out.println("操作已取出!:借记卡余额:"+balance);
}else{
System.out.println("抱歉!!:借记卡余额不足!!!");
}
return balance;
}
double setMoney(double a) { //借记卡存款
balance = balance +a;
return balance;
}
public double yue(){
double sum =balance;
System.out.println("操作已成功!!!");
System.out.println("现余额:"+sum);
return sum;
}
}
class DC extends Account implements Overdraft //信用卡
{
double balance = 5000000;
void bankAccountNumber()
{
ID ="584946413bdfdf58";
rate = 0.74;
System.out.println("信用卡账号:"+ID);
System.out.println("信用卡利率:"+rate);
}
double getMoney(double a) //信用卡取款
{
balance = 5000000 - a;
return balance;
}
public double yue()
{
double sum =balance;
System.out.println("操作已成功!!!");
System.out.println("现余额:"+sum);
return sum;
}
double setMoney(double a) { //信用卡存款数
balance = 5000000;
return balance;
}
public void show() { // 透支限制
System.out.println("是否查看此卡的透支限度!");
System.out.println("是 :输入-1 否: 其他数字");
Scanner s =new Scanner(System.in);
if (s.nextInt() == -1) {
System.out.println("信用卡透支数:5000000") ;
System.out.println("是否取款:");
System.out.println("是(Yes):输入-1 否(No):输入-2");
Scanner sw = new Scanner(System.in);
switch (sw.nextInt()) {
case -1:
System.out.println("请输入取款金额:");
Scanner sca = new Scanner(System.in);
double sss = sca.nextDouble();
getMoney(sss);
yue();
break;
case -2:
System.out.println("系统已关闭");
break;
default:
System.out.println("请输入正确数字!!!");
break;
}
}else {
System.out.println("是否取款!");
System.out.println("是 :输入-1 否: 其他数字");
Scanner sz =new Scanner(System.in);
if (sz.nextInt()==-1) {
System.out.println("输入取款金额:");
Scanner sq =new Scanner(System.in);
getMoney(sq.nextInt());
yue();
}else{
System.out.println("系统已关闭!!!");
}
}
}
}
public class Work06银行¥
{
static
{
System.out.println("欢迎进入银行查询!!!");
System.out.println("");
}
public static void main(String[] args)
{
DC dc = new DC(); //信用卡
Debit debit = new Debit(); //借记卡
System.out.println("请选择借记卡/信用卡:");
System.out.println("选择借记卡:输入-1");
System.out.println("选择信用卡:输入-2");
Scanner sc = new Scanner(System.in);
int g = sc.nextInt();
if (g==-1)
{
System.out.println("欢迎进入借记卡操作页面:");
System.out.println("");
debit.bankAccountNumber();
System.out.println("是否存取款:");
System.out.println("存款:输入-1 取款:输入-2");
Scanner s = new Scanner(System.in);
switch (s.nextInt()) {
case -1:
System.out.println("请输入存款金额:");
Scanner sca = new Scanner(System.in);
double sss = sca.nextDouble();
debit.setMoney(sss);
debit.yue();
break;
case -2:
System.out.println("请输入取款金额:");
Scanner sa = new Scanner(System.in);
double ss = sa.nextDouble();
debit.getMoney(ss);
break;
default:
System.out.println("请输入正确数字!!!");
break ;
}
}else if(g == -2)
{
System.out.println("欢迎进入信用卡操作页面:");
System.out.println("");
dc.bankAccountNumber();
dc.show();
}else{
System.out.println("请输入正确数字!!!");
}
}
}
效果:
5、default 接口默认方法(JAVA8)
好处: 打破了Java之前版本对接口的语法限制
修饰符的权限:
private > default > protected > public
public interface Interface1{
default void helloWorld() {
System.out.println("hi i'm from Interface1");
}
}
/**
* 实现接口Interface1
*/
public class MyImplement implements Interface1{
public static void main(String[] args) {
MyImplement myImplement = new MyImplement();
//直接调用helloWorld()方法
myImplement.helloWorld();
}
}
效果: