java 从零开始,学习笔记之基础入门<抽象类_接口_多态>(十三)(二)

2014-11-24 08:34:27 · 作者: · 浏览: 1
/计算利息的算法:本金*利率,
//但是利率的算法实现并没有在这个类中实现
Interest=getFund()*getInterestRate();
return Interest;
}
/**不同的存款类型有不同的利率, 因此,不在这个父类中实现利率的计算方法,而将它推迟到子类中实现*/
protected abstract double getInterestRate();
}
}
接口:是抽象方法与常量的集合。也就是说接口中只能存在抽象方法和常量,不能够存在除了抽象方法以外的其他普通方法。
接口可以看做是一个比抽象类更加抽象的类。
接口中也只有方法的生命,没有具体的方法的实现。
接口中只包含常量或者抽象方法.
接口的语法格式:
访问修饰符+interface+接口名{
//常量 :访问修饰符 +static +final +数据类型 + 常量名=常量值
注意: Java编码规范中,常量名必须都大写
//抽象方法
}
*@authorAdministrator
* 接口是比抽象类更加抽象的类
* 抽象类可以有抽象方法和普通方法而接口中则只能有抽象方法
* 接口中只能存在常量,不能存在变量
* 一个类用implements关键字来实现一个接口,
* 在实现来中实现接口中所有没实现的方法
* 接口可以看着多个未实现方法的集合
* 一个类能否实现多个接口?
* 一个类可以实现多个接口,
* 但是该类要将多个接口中的所有未实现的方法实现一遍
* 接口可以继承一个接口么?
* 接口可以继承一个或者多个接口,是多继承的
* 继承多个接口用extends关键字,接口与接口之间用“,”号分开
package com.ibm.interfaces;
public interface InterfaceDemo {
//在接口中可以定义常量不能定义变量
//在接口中只能有抽象方法不能有普通方法
public static final StringNAME="Ibm";
public abstract void show();
//Stringstr;//不能定义
//public void show2(){}//不能定义
}
一个接口可以继承另外一个接口,继承的关键字也是extends,并且和类不同的是:一个接口可以继承多个接口。
如果一个接口继承了多个接口,那么就继承了接口中的所有方法,如果一个类实现该接口,那么此类就应该实现所有接口中的所有方法
一个类实现多个接口采用implements关键字,实现多个接口,接口与接口直接用“,”分开
如果一个类实现了一个或者多个接口那么该类就必须实现接口中所有没有实现的方法。
public class 类名 implements 接口名1,接口名2,接口名3{
}
多个类可以同时实现一个接口
一个类可以同时实现一个或者多个接口
如果一个类同时 实现了多个接口,那么该类就应该重写所有接口中的抽象方法。
package com.ibm.interfaces;
public class Client implements FatherInterface,GrandFatherInterface{
@Override
public void makeMoney() {
//TODO Auto-generated method stub
}
@Override
public String getName() {
//TODO Auto-generated method stub
return null;
}
@Override
public void show() {
//TODO Auto-generated method stub
}
}
为什么要使用接口?
1 隐藏了具体的方法的实现细节
2 提高了程序的扩展性
3 方便代码维护
多态
一种形态多种表现形式。
v 在Java中,对象变量是多态的。一个类型为Aclass的变量既可以指向类型为Aclass的对象,又可以指向Aclass的任何子类的对象
v 以多态的形式来传递参数,增强了参数类型的灵活性
v 一个对象只能有一种确切的数据类型
v 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
在类与类的继承中呢,传递的如果是一个父类的对象,则访问时,只能访问到父类中有的方法,在子类中新增加的方法则访问不到
将具体的实现类的对象赋给声明的接口的对象,通过接口的对象指向的是接口中的抽象方法,但实质上调用的是实现类中实现接口的方法
package com.ibm.Polymorphisms;
public interface Person {
public abstract void run();
public abstract void eat();
public abstract void sleep();
}
package com.ibm.Polymorphisms;
public class Girl implements Person{
@Override
public void run() {
//TODO Auto-generated method stub
System.out.println("我是girl的run方法");
}
}
package com.ibm.Polymorphisms;
public class Boy implements Person{
@Override
public void run() {
//TODO Auto-generated method stub
System.out.println("我是boy的run方法");
}
}
package com.ibm.Polymorphisms;
public class Test {
//有一个方法来打印出对应的某一个对象的方法
// public void show(Girl g){
// g.run();
// }
//
// public void show(Boy b){
// b.ru