多态

来源:互联网 发布:好听的网络歌手歌曲 编辑:程序博客网 时间:2024/06/05 04:43

多态:继承和实现是多态的前提条件。
1、 多种状态或者形态
2、 好丈夫+好父亲+好儿子
3、 父类的引用指向子类对象。
4、 ClassCastException 类型转换异常(说明没有继承关系或者实现关系)
5、 类中方法可以覆盖,成员变量(资产)不能覆盖。
官方点就是:
—对于成员函数:编译时看引用变量所属的类中是否有所调用的成员、运行时看对象所属的类中是否有所调用的成员
–对于成员变量:只看引用变量所属的类

==========================

代码测试
片段1:
父类的引用指向子类对象。

class PolyDemo{    public static void main(String args[]){        Dog a=new Dog();        a.cry();        Animal b=new Dog();//父类的引用指向子类对象。        b.cry();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }}结果:D:\java2>javac PolyDemo.javaD:\java2>java PolyDemoDog cry...Dog cry...

片段2:

class PolyDemo{    public static void main(String args[]){        Dog c=new Animal();        c.cry();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:4: 不兼容的类型找到: Animal需要: Dog                Dog c=new Animal();                      ^1 错误

片段3:

class PolyDemo{    public static void main(String args[]){        Object a=new Dog();        a.cry();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:5: 找不到符号符号: 方法 cry()位置: 类 java.lang.Object                a.cry();                 ^1 错误

片段4:

class PolyDemo{    public static void main(String args[]){        Animal a=new Dog();        a.watch();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:5: 找不到符号符号: 方法 watch()位置: 类 Animal                a.watch();                 ^1 错误

片段5:

class PolyDemo{    public static void main(String args[]){        Animal a=new Dog();        Dog b=a;        b.watch();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:5: 不兼容的类型找到: Animal需要: Dog                Dog b=a;                      ^1 错误

片段7:

class PolyDemo{    public static void main(String args[]){        Animal a=new Dog();        Dog b=(Dog)a;        b.watch();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}结果:D:\java2>javac PolyDemo.javaD:\java2>java PolyDemoDog watch...

片段8:

class PolyDemo{    public static void main(String args[]){        Dog a=new Dog();        Animal b=a;        b.cry();        b.watch();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:7: 找不到符号符号: 方法 watch()位置: 类 Animal                b.watch();                 ^1 错误

片段9:
ClassCastException 类型转换异常(说明没有继承关系或者实现关系)

class PolyDemo{    public static void main(String args[]){        Dog a=new Dog();        Cat b=(Cat)a;//出现类型转换异常,Dog和Cat之间没有关系        b.cry();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}class Cat extends Animal{    public void cry(){        System.out.println("Cat cry...");    }}结果:D:\java2>javac PolyDemo.javaPolyDemo.java:5: 不可转换的类型找到: Dog需要: Cat                Cat b=(Cat)a;                           ^1 错误

片段10:重点
类中方法可以覆盖,成员变量(资产)不能覆盖

class PolyDemo{    public static void main(String args[]){        Dog b=new J8();        System.out.println(b.name);        b.cry();    }}class Animal{    public void cry(){    }}class Dog extends Animal{    String name="小白";    public void cry(){        System.out.println("Dog cry...");    }    public void watch(){        System.out.println("Dog watch...");    }}class J8 extends Dog{    String name="大黄";    public void cry(){        System.out.println("jing8 cry...");    }}结果:D:\java2>javac PolyDemo.javaD:\java2>java PolyDemo小白jing8 cry...

片段11:
类的特殊成员变量:
this:当前对象的引用
super:父类对象的引用

class PolyDemo{    public static void main(String args[]){        Car a=new Benz();        System.out.println(a.getColor());        a.setColor("灰色");        System.out.println(a.getColor());    }}class Car{    private String color="无色";    public String getColor(){        return this.color;    }    public void setColor(String color){        this.color=color;    }}class Benz extends Car{    private String color="黑色";    public String getColor(){        return super.getColor();//调用父类的getColor()方法    }    public void setColor(String color){        super.setColor(color);//调用父类的setColor()方法    }}结果:D:\java2>javac PolyDemo.javaD:\java2>java PolyDemo无色灰色
原创粉丝点击