多态 public class Fu { int a=1; public void methed(){ System.out.println("这是父类"); } } public class Zi extends Fu{ int a=2; public void methed(){ System.out.println("这是子类"); } } public interface JiDu { public abstract void jidu(); } public class Pig implements JiDu{ public void jidu(){ System.out.println("缉毒炜在缉毒"); } } public class Tset { public static void main(String[] args) { //普通类的多态:父类类型 变量名=new 子类类型(); //多态中的成员变量特点 编译运行看左边 //1.编译时期看父类是否有该成员变量,有编译成功,没有,编译失败 //2.运行时期的结果走父类成员变量的值 //多态中的成员方法特点 编译看左边 运行看右边 //1.编译时期看父类是否有该成员方法,有编译成功,没有,编译失败 //2.运行时期的结果是调用子类重写后的方法 Fu f=new Zi(); System.out.println(f.a); f.methed(); JiDu j=new Pig();//向上转型 :父类类型 变量名=new 子类类型(); j.jidu(); System.out.println(j instanceof Pig); //前提需要先有向上转 向下转型:子类类型 变量名=(子类类型) 父类引用变量; 可以调用自己独有的变量和方法 //Person p=(Person)a; } } public abstract class Animal { public abstract void eat(); } public class Dog extends Animal{ public void eat() { System.out.println("狗吃屎"); } public void lookhome(){ System.out.println("看家"); } } public class Test { public static void main(String[] args) { Animal dog=new Dog(); dog.eat(); //调用自己独有的方法 method(dog); } public static void method (Animal an){ if(an instanceof Dog){ Dog d=(Dog)an; d.lookhome(); }else if(an instanceof Cat){ Cat c=(Cat)an; c.pu(); } } }