JAVA入门到精通-第12讲-多态:一个引用(类型)在不同情况下的多种状态
java面向对象编程(2)--四大特征
多态--概念
所谓多态,就是指一个引用(类型)在不同情况下的多种状态。也可以理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。
实现多态有两种方式:1、继承;2、接口
多态演示[Dome122.java]
//演示继承、方法覆盖、多态
public class Demo122 {
public
static void main(String[] args) {
//非多态演示
Cat
cat=new Cat();
cat.cry();
Dog
dog=new Dog();
dog.cry();
//多态演示
Animal
an=new Cat();
an.cry();
an=new
Dog();
an.cry();
}
}
//动物类
class Animal{
String
name;
int
age;
public
String getName() {
return
name;
}
public
void setName(String name) {
this.name
= name;
}
public
int getAge() {
return
age;
}
public
void setAge(int age) {
this.age
= age;
}
//动物会叫
public
void cry(){
System.out.println("不知道怎么叫");
}
}
//创建Dog子类并继承Animal父类及覆盖cry方法
class Dog extends Animal{
//狗叫
public
void cry(){
System.out.println("汪汪叫");
}
}
class Cat extends Animal{
//猫自己叫
public
void cry(){
System.out.println("猫猫叫");
}
}
-------------------------------------------------------------------------------
多重多态演示[Dome123.java]
//演示子类继承父类、方法覆盖、多态方法
public class Demo123 {
public
static void main(String[] args) {
//非多态演示
System.out.println("非多态演示:");
Cat
cat=new Cat();
cat.cry();
Dog
dog=new Dog();
dog.cry();
System.out.println();
//多态演示
System.out.println("多态演示:");
Animal
an=new Cat();
an.cry();
an=new
Dog();
an.cry();
System.out.println();
//多重多态演示
System.out.println("多重多态演示:");
Master
master=new Master();
master.feed(new
Dog(),new Bone());
master.feed(new
Cat(),new Fish());
}
}
//主人类
class Master{
//给动物喂食物,使用多态,只要写一个方法
public
void feed(Animal an,Food f){
an.eat();
f.showName();
}
}
//食物父类
class Food{
String
name;
public
void showName(){
System.out.println("食物");
}
}
//食物鱼子类
class Fish extends Food{
public
void showName(){
System.out.println("鱼");
}
}
//食物骨头子类
class Bone extends Food{
public
void showName(){
System.out.println("骨头");
}
}
//动物类Animal父类
class Animal{
String
name;
int
age;
public
String getName() {
return
name;
}
public
void setName(String name) {
this.name
= name;
}
public
int getAge() {
return
age;
}
public
void setAge(int age) {
this.age
= age;
}
//动物会叫
public
void cry(){
System.out.println("不知道怎么叫");
}
//动物吃东西
public
void eat(){
System.out.println("不知道吃什么");
}
}
//创建Dog子类并extends继承Animal父类及覆盖cry方法
class Dog extends Animal{
//狗叫
public
void cry(){
System.out.println("汪汪叫");
}
//狗吃东西
public
void eat(){
System.out.println("狗爱吃骨头");
}
}
class Cat extends Animal{
//猫自己叫
public
void cry(){
System.out.println("猫猫叫");
}
//猫吃东西
public
void eat(){
System.out.println("猫爱吃鱼");
}
}
多态--注意事项:
1、java允许父类的引用变量引用它的子类的实例(对象)
Animal an=new Cat();//这种转换时自动完成的
2、关于类型转换还有一些具体的细节要求,我们在后面还要提,比如子类能不能转换成父类,有什么要求等等...