禹娜day22
多态的使用
父类的引用作为方法的参数
package itlaobing;
public class Pet {
private String name;
public void sound() {
}
public Pet() {
super();
}
public Pet(String name) {
super();
this.name = name;
}
}
package itlaobing;
public class Dog extends Pet {
private String name;
public Dog(String name) {
super();
this.name = name;
}
@Override
public void sound() {
System.out.println("旺旺");
}
}
package itlaobing;
public class Cat extends Pet {
private String name;
public Cat(String name) {
super();
this.name = name;
}
@Override
public void sound() {
System.out.println("喵喵");
}
}
package itlaobing;
import java.util.Random;
public class PetShop {
//父类引用作为方法参数时,可以传入该类的任意子类对象,实现多态
public static void petSound(Pet pet) {
pet.sound();
}
public static void main(String[] args) {
Pet pets[] = new Pet[] {
new Dog("大黄"),
new Cat("花花"),
new Dog("小黄"),
new Cat("波斯")
};
int index = new Random().nextInt(pets.length);
petSound(pets[index]);
}
}
多态的使用:父类作为方法返回值的情况
public class PetShop {
//父类引用作为方法参数时,可以传入该类的任意子类对象,实现多态
public static void petSound(Pet pet) {
pet.sound();
}
//父类引用作为方法返回值时,可以返回该类的任意子类对象,实现多态
public static Pet getPet(String breed) {
Pet pet = null;
switch(breed) {
case "dog":
pet = new Dog();
break;
case "cat":
pet = new Cat();
break;
}
return pet;
}
public static void main(String[] args) {
Pet pets[] = new Pet[] {
new Dog("大黄"),
new Cat("花花"),
new Dog("小黄"),
new Cat("波斯")
};
int index = new Random().nextInt(pets.length);
petSound(pets[index]);
Pet pet = PetShop.getPet("dog");
System.out.println("新进的货物是"+pet.toString());
}
}
分析:父类引用作为方法返回值时,可以返回该类的任意子类对象,实现多态
抽象
抽象类
如果类使用abstract关键字修饰,该类就是抽象类。
public abstract class Pet{}
抽象方法
如果方法使用abstract关键字修饰,该方法就是抽象方法。抽象方法不允许有方法体。不能有{}
public abstract class pet{
public abstract void sound();
}
抽象类和抽象方法的规则
1.抽象类可以包含
普通方法或者抽象方法。
2.抽象类中可以定义
实例属性或者静态属性。
3.如果一个类中包含了抽象方法,那么这个类就必须是抽象类。
4.抽象类中不一定包含抽象方法。
5.抽象类不允许实例化
。(抽象类的抽象方法没有方法体)
使用抽象类的原因
抽象类在OOP的思想中,是专门在继承关系中,抽象类在继承关系中当父类,让子类继承抽象类。
why?抽象类中定义抽象方法,让子类继承抽象方法。父类通过抽象方法让子类遵守父类的规范(父类的抽象方法),遵守规范是子类实现了父类的抽象方法。
子类继承抽象类后,子类也继承了父类中的抽象方法,此时的子类有两种处理抽象方法的办法。
第一是将子类定义成抽象类,但是这种这种处理方法导致子类不能被实例化
。
第二是子类实现父类的抽象方法,怎么实现呢?就是将子类中抽象方法再定义一遍并且添加方法体。此时子类中就没有抽象方法了,子类也就不是抽象类了,这样子类就可以实例化对象了。
类与类之间存在的三种关系
is a 继承 use a 使用 has a 包含
##### 关于main方法的args参数的使用
近期评论