Java学习 java -- 多态
来源:互联网 发布:呵里巴巴淘宝网 编辑:程序博客网 时间:2024/04/29 10:36
多态:一种事物的多种形态
多态的规则(前提):
1.类与类之间要建立关系,建立继承的关系
2.必须要有方法的重写
3.父类的指针(引用) 指向子类的对象(空间)
public static void main(string[] args){Cat cat = new Cat();cat.eat();Animal a = new Cat();a.eat();Animal aDog = new Dog();aDog.eat();}class Animal{public void eat(){system.out.println("吃饭");}}class Cat extends Animal{public void eat(){system.out.println("猫吃鱼");}}class Dog extends Animal{public void eat(){system.out.println("狗吃肉");}}
猫是一只动物 而不是动物是一只猫 这样逻辑是不通的 在这里动物是父类 猫狗是子类 猫狗是一只动物就相当于父类指向了子类的对象
多态时如何调用成员变量
多态时 当父类引用调用成员变量时
编译 需要看父类中有没有这个成员变量,没有编译不通过
运行 访问就是父类中的这个成员变量
结论:
多态时 访问成员变量 访问父类 访问成员变量 编译 和 运行 (看父类)
多态调用成员变量时
编译看父类 运行看子类
public static void main(string[] args){Father f = new Son();f.speak();system.out.println(f.num);}class Father{int num = 10;public void speak(){system.out.println("Father 说");}}class Son{int num = 20;public void speak(){system.out.println("Son 说");}}
打印结果
多态时父类指向子类的对象在内存中的表现
那 现在在main函数中加上
Son s = new Son(); s.speak(); System.out.println(s.num);
打印结果是son说 20; 这个在内存中的表现
多态的好处
1.怎抢了代码的可维护性(建立在继承上)
2.增强方法的可扩展性(核心)
多态的弊端:
不能直接调用子类的特殊(不是重写父类的)方法
如果调用子类的特殊方法,需要将父类强转位子类的对象,然后对象点方法 调用子类的特殊方法
public static void main(string[] args){Person p = new Cheat();p.speak();Cheat ct = (Cheat)p;// 强制转换成子类}class Person{pubic void speak(){system.out.println("聊天");}}class Cheat extends Person{public void speak(){system.out.println("洗脑");}public void puch(){system.out.println("打人")}}
在多态时 子类非常多的情况下 父类调用子类的方法时 可以封装一个方法 参数是父类的对象 在传参的时候匿名创建new Dao 相当于 WuQi w = new Dao();——父类指向子类的对象 进行调用 我们想调用子类的特殊方法 这里需要用一个 instanceof 关键字 这个关键字 是判断 前面的对象是否属于 后面的 实例
public static void main(string[] args){fun(new Jian());fun(new Dao());}public static void fun(WuQi w){w.puch();if(w instanceof Dao){Dao dao = (Dao)w;dao.liangdao();}else if(w instanceof Jian){Jian jian = (Jian)wjian.liangjian();}}class WuQi{public void puch(){system.out.println("打人");}}class Jian extends WuQi{pubilc void puch(){system.out.println("砍人");}public void liangjian(){system.out.println("独孤九剑");}}class Dao extends WuQi{public void puch(){system.out.println("刺人");}public void liangdao(){system.out.println("独霸天下");}}
阅读全文
0 0
- Java学习 java -- 多态
- JAVA学习【知】多态
- JAVA学习:多态
- Java学习-多态
- java学习之-多态
- java 学习之 多态
- Java学习--多态
- java学习笔记-多态
- Java学习·多态
- Java学习-8.多态
- Java学习笔记-多态
- Java学习3---多态
- Java学习-多态
- Java 多态 学习
- Java学习笔记----多态
- Java学习9:多态
- java日常学习:多态
- Java----再学习-----Java多态、继承、接口
- Java: unmappable character for encoding Gp1252错误 改为UTF-8 中文显示“???"
- 自己创建tld标签
- 微信小程序:冒泡事件及其阻止
- 第6章gp_toolkit管理架构-Checking Resource Queue Activity and Status
- 对学生成绩的排序,
- Java学习 java -- 多态
- thinkphp3.2在php7下运行,出现错误"系统不支持:mysql"
- 数组排序
- Python中time模块详解(转)
- 页面计时器
- 为什么函数声明和定义中的一维数组形参无须写明元素数目
- poj3159 Candies(查分约束最短路)
- React框架学习之react环境搭建
- Tomcat 部署项目的三种方法