多态的理解
来源:互联网 发布:oppo手机的mac地址 编辑:程序博客网 时间:2024/05/29 02:22
多态
1.对多态的理解:同一个对象在不同时刻体现出来的不同状态。
简单来说就是猫和狗都是动物,但他们又有许多不同,猫和狗是动物向下延伸的不同结果,这就是多态。
2.多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
3.多态的分类:
a:具体类多态
class Fu {} class Zi extends Fu {} Fu f = new Zi();
b:抽象类多态
abstract class Fu {} class Zi extends Fu {} Fu f = new Zi();
c:接口多态
interface Fu {} Fu f = new Zi();
4.多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造(注:子类默认调用父类的无参构造,等于默认在子类的构造方法中有super();)
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
package com.lenovo.demo3;/** * 动物类 * @author Petrichor * */public class Animal { int a = 10;public Animal() { System.out.println("动物无参构造"); }public Animal(int a) { System.out.println("动物有参构造"); }public void eat() { System.out.println("动物吃东西"); }public void sleep() { System.out.println("动物睡觉"); }public int getA() { return a; }public void setA(int a) { this.a = a; }}
package com.lenovo.demo3;/** * 猫类 * @author petrichor * */public class Cat extends Animal { int a = 20;public Cat(int a) { System.out.println("猫的有参构造"); }public Cat() { super(5); System.out.println("猫的无参构造"); }public void eat() { System.out.println("猫吃鱼"); }public void sleep() { super.sleep(); System.out.println("猫躺着睡"); } public void fly(){ System.out.println("猫能飞?"); } }
package com.lenovo.demo3;/** * 测试类 * @author Petrichor * */public class Tset { public static void main(String[] args) { // 多态 Animal cat = new Cat(); // 动物有参构造 猫的无参构造 cat.eat();// 猫吃鱼 cat.sleep();// 动物睡觉 猫躺着睡 // cat.fly();不能调用,Animal中没有fly方法 System.out.println(cat.a);// 10 System.out.println(cat.getA());// 10 cat.setA(30); System.out.println(cat.getA());// 30 // 普通 Cat cat2 = new Cat(5);// 动物无参构造 猫的有参构造 cat2.fly();// 猫能飞? System.out.println(cat2.a);// 20 System.out.println(cat2.getA());// 10 cat2.setA(40); System.out.println(cat2.getA());// 40 }}
这个动物和猫类基本体现多态中成员变量、成员方法、构造方法的调用,可以看到当我们
Animal cat = new Cat();
调用的a是Animal类的。而当
Cat cat2 = new Cat(5);
调用的a是Cat类的。
5.多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
6.多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
7.多态中的转型
A:向上转型
从子到父
B:向下转型
从父到子
阅读全文
0 0
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- 多态的理解
- kotlin
- MySQL 学习<五> MySQL函数简介(条件判断函数、系统信息函数、其他常见函数函数)
- ambari架构
- Spring task基本使用
- js获取屏幕大小
- 多态的理解
- OpenGL蓝宝书源码学习(准备工作)
- GreenPlum 可读写外部表 实战
- UVALive
- c++第6次实验【项目4:字符删除】
- 公钥,私钥和数字签名这样最好理解
- 练习3.6 for (auto &c;line) getline(cin,line ) 下标 有个程序有错误没改正
- A3C代码详解
- linux 下载python psutil