Practice [2016.11.05]

生成验证码及三维数组打印
本文提供了一个PHP函数用于生成指定长度和类型的验证码,并展示了如何使用该函数。此外,还介绍了一种方法来打印复杂的三维数组,每个子数组被格式化为一个单独的表格。
/*//写一个函数,产生指定类型长度的验证码
function yzm($lens, $type = 0)
{
$str = ['1234567890',
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
];//定义一个用来获取验证码的数组,该数组拥有各种我们所需要的验证码类型
$str = str_shuffle($str[$type]);
$str = substr($str,0,$lens);
echo $str;
}
yzm(4, 1);
*/


/*//使用任意方式完成三维数组的打印,每组打印成一个表格
$school = [
'iOS'=>[
['name'=>'zhaoo','age'=>20,'sex'=>'Male'],
['name'=>'qian','age'=>21,'sex'=>'Male'],
['name'=>'sun','age'=>22,'sex'=>'Female'],
['name'=>'li','age'=>23,'sex'=>'Female'],
['name'=>'zhou','age'=>24,'sex'=>'Female']
],
'PHP'=>[
['name'=>'wu','age'=>20,'sex'=>'Male'],
['name'=>'zheng','age'=>21,'sex'=>'Male'],
['name'=>'wang','age'=>22,'sex'=>'Female'],
['name'=>'feng','age'=>23,'sex'=>'Female'],
['name'=>'chen','age'=>24,'sex'=>'Female']
]
];
foreach ($schoolas $k => $v) {
echo '<br />';
echo '<table border="1" width="300" align="center" bgcolor="cyan">';
echo '<caption>'.$k.'</caption>';
foreach ($v as $ke => $va) {
if ($ke % 2 == 0) {
echo '<tr bgcolor="gray">';
} else {
echo '<tr bgcolor="pink">';
}
foreach ($va as $key => $value) {
echo '<td align="center">'.$value.'</td>';
}
echo '</tr>';
}
echo '</table>';
echo '<br />';
}
*/
# 代码概述 你遇到的错误信息: ``` java: practice02.Dog不是抽象的, 并且未覆盖practice02.Animal中的抽象方法showAbility() ``` 说明:类 `Dog` 所在的包为 `practice02`,而问题出在 **`Animal` 类中定义了一个抽象方法 `showAbility()`**,但该方法 **没有被 `Dog` 类重写(覆盖)**。 然而根据之前的设计,`showAbility()` 方法本应属于接口 `SpecialAbility`,而不是抽象类 `Animal`。因此这个错误的根本原因很可能是:**你不小心把 `showAbility()` 方法错误地定义在了 `Animal` 抽象类中,而不是只放在 `SpecialAbility` 接口中。** --- # 代码解析 我们来分析错误: - 错误指出:`Animal` 类中有抽象方法 `showAbility()`。 - `Dog` 继承自 `Animal`,就必须实现所有 `Animal` 中的抽象方法。 - 但 `Dog` 没有实现 `showAbility()` → 编译失败。 - 如果你本意是让 `Cat` 和 `Bird` 实现特殊能力,而 `Dog` 不实现,那么 `showAbility()` **就不应该出现在 `Animal` 类中!** ✅ 正确设计应为: ```java // Animal.java public abstract class Animal { private String name; private int age; public Animal(String name, int age) { this.name = name; this.age = age; } public abstract void eat(); public abstract void makeSound(); public void sleep() { System.out.println(name + "在睡觉"); } // getter 方法 public String getName() { return name; } public int getAge() { return age; } } ``` ```java // SpecialAbility.java public interface SpecialAbility { void showAbility(); // 只在接口中定义 } ``` ```java // Dog.java class Dog extends Animal { public Dog(String name, int age) { super(name, age); } @Override public void eat() { System.out.println(getName() + "正在吃狗粮"); } @Override public void makeSound() { System.out.println(getName() + ":汪汪汪!"); } } // 不需要实现 showAbility(),因为它没实现 SpecialAbility 接口 ``` ```java // Cat.java class Cat extends Animal implements SpecialAbility { public Cat(String name, int age) { super(name, age); } @Override public void eat() { System.out.println(getName() + "正在吃猫粮"); } @Override public void makeSound() { System.out.println(getName() + ":喵喵喵!"); } @Override public void showAbility() { System.out.println(getName() + "的特殊能力:爬树"); } } ``` --- # 解决方案 🔧 **修复步骤如下**: 1. 打开 `Animal.java` 文件。 2. 确保其中 **没有声明 `public abstract void showAbility();`**。 3. 如果有,请将其删除。 4. 确保 `showAbility()` 仅存在于 `SpecialAbility` 接口中。 5. 只有实现了 `SpecialAbility` 接口的类(如 `Cat`, `Bird`)才需要重写 `showAbility()`。 6. `Dog` 类无需实现该方法,也无需实现该接口。 --- # 知识点(列出该代码中遇到的知识点) - **抽象类与方法约束**:子类必须实现父类所有抽象方法,否则需声明为抽象类。 - **接口实现选择性**:只有实现接口的类才需重写其方法,提高了灵活性。 - **职责分离原则**:行为应定义在接口而非基类中,避免无关子类被迫实现多余方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值