继承与多态
包的导入
语法为:
import <包名>.<类名>
如果要导入一个包的多个类,可以使用"*"表示包中所有的类。
继承
继承是面向对象程序设计的一个重要特征,它是通过继承原有类派生出的子类进而构造出更为复杂的子类。子类既有新定义的行为特征,又继承了原有类的行为特征。
Java继承语法为:
[修饰符] class 子类名 [extends 父类名]{
}
例:创建父类武器类,创建子类圣剑类,和子类长矛类,然后调用
public class Sword extends Weapon {
String name;//武器名称
int attackValue;
public Sword(String name, int attackValue) {
super(name, attackValue);//代表父类
}
public class Spear extends Weapon{
String name;//武器名称
int attackValue;
public Spear(String name, int attackValue) {
super(name, attackValue);
}
public static void main(String[] args) {
Sword sword=new Sword("神剑", 300);
sword.attack();
Spear spear=new Spear("亚索", 12000);
spear.attack();
}
运行结果如图
重载
方法重载是指一个类中的多个方法可以具有相同的方法名但参数必须不同。
例
public class Book {
//定义三个计算价格的方法
public float getPrice(){
return 100;
}
public float getPrice(int page){
return (float)(page*0.1);
}
public float getPrice(int page,float discount){
return (float)(page*discount);
}
public static void main(String[] args) {
Book book=new Book();
System.out.println("默认价格是"+book.getPrice());
System.out.println("按图书页数计算价格是"+book.getPrice(100));
System.out.println("按图书页数和折扣计算价是"+book.getPrice(100,0.9f));
}
结果如下
重写
在重写的方法和被重写的方法必须具有相同方法名称,参数列表和返回类型重写方法不能使用比较重写的方法更严格的访问权限。
例:鸟类都包含飞翔方法,但鸵鸟是特殊的鸟类,因此鸵鸟应该是鸟的子类,但飞翔方法明显不适合鸵鸟。所以鸵鸟需要重写鸟类的方法
public class Bird {
public void fly() {
System.out.println("我在蓝天白云间自由地飞翔");
}
}
public class Ostrich extends Bird{
public void fly() {
System.out.println("我只能在陆地上拍拍翅膀奔跑");
}
public void prey() {
fly();
System.out.println("执行捕食方法");
}
public static void main(String[] args) {
Ostrich ostrich=new Ostrich();
ostrich.prey();
// Bird bird=new Bird();
// bird.fly();
}
运行结果如下
多态
多态是指同一操作作用不同的对象,可以有不同的解释,以致产生不同的执行结果。在编译时,可以通过父类的引用指向子类对象,而在运行时则通过父类所指向的子类对象,调用子类中重写父类的方法。
创建父类人物类
//人物类
public class Figure {
public String name;
public void attack() {
System.out.println(this.name+"正在进行 攻击");
}
public void run() {
System.out.println("英雄在奔跑");
}
**```
创建子类**
```java
public class Warrior extends Figure{
public void attack() {
System.out.println(this.name+"正在进行物li攻击");
}
创建法师类
public class Master extends Warrior {
public void attack() {
System.out.println(this.name+"正在进行魔法攻击");
}
Figure f1=new Warrior();
f1.name="德玛西亚";
f1.attack();
Figure f2=new Master();
f2.name="汉地神牛";
f2.attack();
if (f1 instanceof Master) {
System.out.println("这是法师类");
}else {
System.out.println("这是战士类");
}