dome1
class Demo1_Polymorphic { public static void main(String[] args) { Cat c = new Cat(); c.eat(); Animal a = new Cat(); //父类引用指向子类对象 a.eat(); }}/** A:多态(polymorphic)概述 * 事物存在的多种形态 * B:多态前提 * a:要有继承关系。 * b:要有方法重写。 * c:要有父类引用指向子类对象。* C:案例演示 * 代码体现多态*/class Animal { public void eat() { System.out.println("动物吃饭"); }}class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); }}
dome2
class Demo2_Polymorphic { public static void main(String[] args) { /*Father f = new Son(); //父类引用指向子类对象 System.out.println(f.num); Son s = new Son(); System.out.println(s.num);*/ Father f = new Son(); //f.print(); f.method(); //相当于是Father.method() }}/*成员变量编译看左边(父类),运行看左边(父类)成员方法编译看左边(父类),运行看右边(子类)。动态绑定静态方法编译看左边(父类),运行看左边(父类)。(静态和类相关,算不上重写,所以,访问还是左边的)只有非静态的成员方法,编译看左边,运行看右边 */class Father { int num = 10; public void print() { System.out.println("father"); } public static void method() { System.out.println("father static method"); }}class Son extends Father { int num = 20; public void print() { System.out.println("son"); } public static void method() { System.out.println("son static method"); }}
dome3
class Demo3_SuperMan { public static void main(String[] args) { Person p = new SuperMan(); //父类引用指向子类对象,超人提升为了人 //父类引用指向子类对象就是向上转型 System.out.println(p.name); p.谈生意(); SuperMan sm = (SuperMan)p; //向下转型 sm.fly(); /* 基本数据类型自动类型提升和强制类型转换 */ int i = 10; byte b = 20; //i = b; //自动类型提升 //b = (byte)i; //强制类型转换 }}class Person { String name = "John"; public void 谈生意() { System.out.println("谈生意"); }}class SuperMan extends Person { String name = "superMan"; public void 谈生意() { System.out.println("谈几个亿的大单子"); } public void fly() { System.out.println("飞出去救人"); }}