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

2014-11-24 08:34:27 · 作者: · 浏览: 3
抽象类_接口_多态
Abstract关键字 表示的是抽象类
他可以修饰一个类或者方法
如果它用来修饰一个类,表示此类是一个抽象类
如果它用来修饰一个方法则表示此方法为一个抽象方法
抽象类:
语法格式:访问修饰符+abstract+class+类名{
抽象方法; 普通方法
} 例如:
package com.ibm.abstractes;
public abstract class AbstractesDemo {
}
抽象类不能被实例化,也就是说抽象类不能被new关键字来创建他的对象
抽象方法:
用abstrat来修饰的方法,方法没有方法体
语法格式
访问修饰符+abstrat+返回值类型 方法名(参数列表);
public abstract class AbstractDemo {
public abstract String show();
public abstract int show1(int m ,int n);
}
抽象方法只有方法的生命,没有具体的方法的实现。
抽象类中既可以包含抽象,也可以包含普通方法,如果抽象类中没有抽象方法,那么抽象类就没有存在的必要性。
一下任意条件满足时,类必须定义成抽象类:
1 此类中含有一个或者一个以上抽象方法
2 类继承了父类中的抽象方法,并且至少有一个抽象方法没有实现
* 抽象类可以被继承 如果一个普通类继承了一个抽象类,那么需要在普通类中实现抽象类中的所有抽象方法
* 如果一个类继承了一个抽象类,并且没有被继承类的所有抽象方法,那么此类一定是抽象类,一个抽象类可以继承另外一个抽象类,也可以多级继承,但是一个抽象类只能继承一个抽象类
3 类实现了某个接口,但是没有全部实现接口中的方法
* 接口中的方法全部都是抽象方法
* 如果一个普通类实现了某个接口,就需要实现接口中的所有方法,如果没有全部实现接口中的方法,那么此类一定是一个抽象类
抽象类不能够直接实例化对象,如果需要实例化对象,那么必须通过之类来实例化
父类 父类对象=new 子类构造器();
计算买一张汽车票、火车票、飞机票的票价的算法:
汽车票:票价+保险
火车票:票价(如果是学生/2 成人全票)+保险
飞机票:票价+
package com.ibm.abstrates;
public abstract class SaleTicket {
/**
* @param money票价
* @param save 保险
* @return
*/
public abstract float saleCar(float money,float save );
public abstract float saleTrain(float money,String typeP,float save);
public abstract float saleFly(float money,float otherMoney,float otherMoney1,float save);
}
package com.ibm.abstrates;
public class SaleClient extends SaleTicket{
public float saleCar(float money,float save) {
//TODO Auto-generated method stub
return money+save;
}
@Override
public float saleTrain(float money, String typeP, float save) {
float f = 0.0f;
if(typeP.equals("成人")){
f = money+save;
}
if(typeP.equals("小孩")){
f = money/2+save;
}
return f;
}
@Override
public float saleFly(float money, float otherMoney,float otherMoney1,
float save) {
return money+otherMoney+otherMoney1+save;
}
}
package com.ibm.abstrates;
public class SaleTest {
public static void main(String[] args) {
//抽象类不能被实例化
//SaleTicketst = new SaleTicket();
SaleClient sc = new SaleClient();
System.out.println(sc.saleCar(36, 1));
//抽象类中只有方法的生命,没有具体的实现,具体的实现方法在其子类中实现
// SaleTicket st = new SaleClient();//将子类的对象赋给父类的引用,调用方法执行的时候是子类中的方法
SaleTicket st = null;
SaleClient sc1 = new SaleClient();
st=sc1;
System.out.println(st.saleCar(36,1));
}
}
一个抽象类可以继承另一个抽象类,那么抽象类中的方法都会被继承过来
可以将一个子类的对象赋给父类的引用,通过父类的对象调方法,指向的是类中的抽象方法,
但是执行的是子类的方法。
模式设计模式:
在父类中定义的一个算法的骨架,不具体的实现算法是怎么做,而是在其子类中体的实现算法的实现细节。那么在父类中定义的方法就是抽象方法,在其子类那个实现的方法就是普通方法
v 例如,银行计算利息,都是利率乘以本金和存款时间,但各种存款方式计算利率的方式不同,所以,在账户这个类的相关方法里,只搭出算法的骨架,但不具体实现。具体实现由各个子类来完成。
abstract class LoanAccount{
//利息,本金
private double Interest, Fund;
public double calculateInterest(){
//取得利率
double interest=getInterestRate();
/