多态指的就是重载和覆盖
Animal类:
package Com;
public abstract class Animal { //抽象类
public String name;
public void walk()
{
System.out.println(name+"..... Animal walk!!!");
}
public void howl()
{
System.out.println(" .....xxxxx.....");
}
// 规则 规范
public abstract void howl2(); // 抽象方法
}
Cat类:
package Com;
public class Cat extends Animal{
public void howl()
{
System.out.println("..... miaomiao!!!");
}
@Override
public void howl2(){
System.out.println("Cat howl2..... miaomiao!!!");
}
}
Dog:
package Com;
public class Dag extends Animal{
public void Swim()
{
System.out.println(".... swim....");
}
public void howl()
{
System.out.println(" wangwang");
}
@Override
public void howl2(){
System.out.println("Dog howl2 wangwang");
}
}
Main:
package Com;
public class main {
/**
* @param args
*/
public static void main(String[] args) {
// 1
// 用子类赋值给父类,父类animal调用的方法 是子类对象Dog()的方法howl()
// 但是父类无法调用父类未声明子类已有的方法swim()
Animal animal= new Dag();
//animial.swim() 父类中未声明,但是子类中含有swim方法,这条语句无法实现
animal.howl(); // 普通方法
animal.howl2(); // 抽象方法
// 2
//
getMsg(animal); // 传入的是对象dog();
Dag dog = new Dag();
dog.name="xiaohua";
getMsg(dog);
}
public static void getMsg(Animal animial)
{
animial.howl();
if (animial instanceof Dag) //方法1: 判断Dag是不是animal 的子类
{
Dag dog= (Dag)animial;
//animial.Swim(); 父类无法调用子类的方法,但是强制类型转换后可调用子类的方法Swim
dog.Swim();
}
if (animial.getClass()== Dag.class)//方法2 : 判断Dag是不是animal 的子类
{
Dag dog= (Dag)animial;
//animial.Swim(); 父类无法调用子类的方法,但是强制类型转换后可调用子类的方法Swim
dog.Swim();
}
}
}
/**
* 小结:
* Java中的多态就是重载和覆盖
* 重载:函数名相同,但是参数不同方法
* 覆盖:使用子类赋值给父类的方式
* 在覆盖的情况下,分为编译期(编译器在进行编译时的状态)和运行期(实际运行的状态)
* 在运行期时,父类声明的方法在子类中同样也有相应声明并实现时,调用的是子类的方法。
* 在编译期时,父类中的被staitc private final修饰和构造器都是调用父类的,不再进行调用子类的。
* */