类的重载
在同一个类中,允许同时存在多个同名方法,只要这些方法的参数个数或类型不同即可。
// 向上转型:将子类对象看做是父类对象 class A{ public static void draw(A a){ //A的静态方法 System.out.println("调用该方法,draw一个A类的图像"); } } public class Parallelogram extends A{ public static void main(String[] args) { Parallelogram b = new Parallelogram(); draw(b); //调用父类A的方法,draw一个A的子类的图像 } }
// 向上转型 class A{ public static void draw(A a){ //A的静态方法 System.out.println("调用该方法,draw一个A类的图像"); } } public class Parallelogram extends A{ public static void main(String[] args) { A a = new Parallelogram(); //将子类对象看作是父类对象进行创建 // Parallelogram c = a; //不能父类的对象直接被赋值给子类 会报错 Parallelogram c = (Parallelogram) a; // 将父类对象通过显示类型转换为子类后,可被赋值给子类的对象 draw(c); } }
public class Test { public static void main(String[] args) { A a1 = new A1(); a1.Eat("a1","ffa1"); A1 aa1 = (A1)a1; aa1.Eat("aa1","ffaa1"); } } class A{ public void Eat (String nm,String ffa){ System.out.println(nm+":方法为"+ffa); } } class A1 extends A{ } /* a1:方法为ffa1 aa1:方法为ffaa1 */
instanceof关键字
判断父类对象是否为子类的实例,或者某个类是否实现了某个接口。
public class Test { public static void main(String[] args) { A a1 = new A1(); a1.Eat("a1","ffa1"); if (a1 instanceof A1) { System.out.println("a1是A1的实例"); A1 aa1 = (A1)a1; aa1.Eat("aa1","ffaa1"); }else{ System.out.println("a1不是A1的实例"); } } } class A{ public void Eat (String nm,String ffa){ System.out.println(nm+":方法为"+ffa); } } class A1 extends A{ } /* a1:方法为ffa1 a1是A1的实例 aa1:方法为ffaa1 */