|NO.Z.00066|——————————|BigDataEnd|——|Java&多态特殊类.V07|——|Java.v07|抽象类应用|
一、抽象类的应用
### --- 抽象类的应用
~~~ ——> 银行有定期账户和活期账户。继承自账户类。账户类中:
~~~ ——> public class Account{
~~~ ——> private double money;
~~~ ——> public double getLixi(){}
~~~ ——> }
二、编程代码
package com.yanqi.task09;
public /*final*/ abstract class Account {
private int money;
public Account() {
}
public Account(int money) {
setMoney(money);
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
if (money >= 0) {
this.money = money;
} else {
System.out.println("金额不合理哦!!!");
}
}
// 自定义抽象方法实现计算利息并返回的功能描述
public abstract double getLixi();
// private 和 abstract 关键字不能共同修饰一个方法
//private abstract double getLixi();
// final 和 abstract 关键字不能共同修饰一个方法
//public final abstract double getLixi();
// static 和 abstract 关键字不能共同修饰一个方法
//public static abstract double getLixi();
}
三、编程代码
package com.yanqi.task09;
public class SubAbstractTest extends AbstractTest/*, Account*/ {
@Override
public void show() {
System.out.println("其实我是被迫重写的,否则我也得变成抽象的呀!");
}
public static void main(String[] args) {
// 1.声明本类类型的引用指向本类类型的对象,没有多态
SubAbstractTest sat = new SubAbstractTest();
sat.show();
System.out.println("-------------------------------");
// 2.声明AbstractTest类型的引用指向子类的对象,形成了多态
// 多态的使用场合之二: 直接在方法体中使用抽象类的引用指向子类类型的对象
AbstractTest at = new SubAbstractTest2();
// 编译阶段调用父类版本,运行阶段调用子类版本
at.show();
((SubAbstractTest2) at).test();
System.out.println("-------------------------------");
SubAbstractTest2 sat2 = new SubAbstractTest2();
sat2.test();
}
}
四、编程代码
package com.yanqi.task09;
public class SubAbstractTest2 extends com.yanqi.task09.AbstractTest {
@Override
public void show() {
System.out.println("使用多态方式可以提高代码的可维护性哦!");
}
public void test() {
System.out.println("第二个子类中独有的方法!");
}
}
五、编程代码
package com.yanqi.task09;
public class FixedAccount extends Account {
public FixedAccount() {
}
public FixedAccount(int i) {
super(i); // 表示调用父类的有参构造方法
}
@Override
public double getLixi() {
// 利息 = 本金 * 利率 * 时间
return getMoney() * 0.03 * 1;
}
public static void main(String[] args) {
// 1.声明Account类型的引用指向子类类型的对象,形成了多态
//Account acc = new FixedAccount(1000);
Account acc = new FixedAccount();
acc.setMoney(1000);
double res = acc.getLixi();
System.out.println("计算的利息是:" + res); // 30.0
}
}
六、编译打印
D:\JAVA\jdk-11.0.2\bin\java.exe "-javaagent:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=53341:D:\IntelliJIDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\NO.Z.10000——javaproject\NO.H.00001.javase\javase\out\production\javase com.yanqi.task09.FixedAccount
计算的利息是:30.0
Process finished with exit code 0
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv002-Java面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通