多态
来源:互联网 发布:好听的网络歌手歌曲 编辑:程序博客网 时间: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无色灰色
阅读全文
0 0
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- Ext4.1.1使用rowexpander
- sublime设置
- [JAVA] Hibernate Component组件映射
- Pillow教程(二)
- python3的练习----求素数
- 多态
- 新手常用的sublime tex3插件安装及其应用
- 软键盘的删除事件的监听
- 如何判断当前进程是在32位/64位系统上运行
- 数据库的存储过程
- keytool生成keystore、truststore、证书以及SSL单向认证在服务端tomcat和客户端的配置
- 借助Nginx搭建反向代理服务器
- Python3远程连接腾讯云ubuntu下的MongoDb
- 使用jenkins搭建自动化打包的apk 下载