JAVA多态详解
来源:互联网 发布:apache beam入门 编辑:程序博客网 时间:2024/05/21 13:21
定义:
多态是继数据抽象和继承之后的又一特征,多态可以改善代码的结构与可读性还可创建可扩展的程序。
举例说明:
人类有“吃”的动作,人还分为“男人”,“女人”但是男人和女人的吃的动作是不相同的。
普通方法:
public class Test { public Test() {} public void eat(String type) { if (type.equals("man")) { System.out.println("man eat----"); } if (type.equals("woman")) { System.out.println("woman eat----"); } }}public static void main(String[] args) { Test test=new Test(); test.eat("man"); }
输出结果:man eat—-
引用多态:
/** * 基类 * * @author 蒙 * */public class People { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public void eat() { System.out.println("People类eat方法输出----" + this.getName()); } public void sleep() { System.out.println("People类sleep方法输出----" + this.getName()); }}/** * 子类 * * @author 蒙 * */public class Woman extends People { @Override public void eat() { System.out.println("Woman类eat方法输出----" + super.getName());// 输出当前name值 }}/** * 子类 * @author 蒙 * */public class Man extends People{ @Override public void eat(){ System.out.println("Man类eat方法输出----" + this.getName());// 输出当前name值 }}public static void main(String[] args) { People p=new Woman();//创建子类,传递给测试方法 p.setName("woman子类"); whoEat(p); }
输出结果:**Woman类eat方法输出—-woman子类
People类sleep方法输出—-woman子类**
总结:如果使用普通方法实现,会有如下缺点如果新增一个“child”的“吃”就要去修改eat方法(eat原始代码),如果使用多态无论新增多少个类型的“吃”,只要继承people类重写eat方法就可以实现(无需修改原始eat)。
成员变量说明:
/** * 基类 * * @author 蒙 * */public class People { private String name="people"; public int i=100; public String getName() { return name; } public void setName(String name) { this.name = name; } public void eat() { System.out.println("People类eat方法输出----" + this.getName()); }}/** * 子类 * * @author 蒙 * */public class Woman extends People { private String name="woman"; public int i=10; @Override public void eat() { System.out.println("Woman类eat方法输出----" + this.getName());// 输出当前name值 System.out.println("Woman类eat方法输出----" + super.getName());// 输出父类name值 } public String getName() { return name; } public void setName(String name) { this.name = name; }}public static void main(String[] args) { People people=new Woman();//创建子类,传递给测试方法 people.setName("woman子类"); whoEat(people); System.out.println(people.getName()); System.out.println(people.i); }
输出结果:
Woman类eat方法输出—-woman子类
Woman类eat方法输出—-people
woman子类
100
解释:
people.setName(“woman子类”);调用的是woman(子类)类的set方法,
System.out.println(people.getName()); 输出调用woman(子类)的get方法,
System.out.println(people.i);输出people(父类)的成员变量
总结:
父类与子类具有相同的成员变量,多态下访问的是父类的成员变量
父类与子类具有相同的方法(就是子类重写父类方法),多态下访问的是子类的方法
注意:静态方法不存在被重写的概念,表面上看似重写,实质static的方法不能被重写,
1 0
- java多态详解
- Java 多态详解
- JAVA多态详解
- java多态详解
- java多态详解
- Java多态详解
- Java的多态详解
- Java 多态的详解
- Java 多态笔记详解
- Java 多态详解 总结 以及 fina,abstractl关键字详解
- java中的继承 多态详解
- java 详解接口、继承和多态
- JAVA多态和动态绑定详解
- 【Java】Java的继承和多态详解
- 【Java】Java的继承和多态详解
- 【Java】Java的继承和多态详解
- Java学习笔记(33)-- Java 多态的详解
- Java特性之多态详解
- spring-AOP1
- Android ConnectivityManager网络连接
- hbase Fully-distributed搭建
- PTA 4-11 求自定类型元素序列的中位数 (25分)
- spring bean的作用域
- JAVA多态详解
- android音频播放SoundPool的使用
- 说一说BufferKnife——View注入框架
- 将图片保存在 array.xml 成string-array 以及读取
- 设计模式—— 单例模式
- 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值
- PHP网站安全问题
- SQL SERVER 执行过程常见报错
- Phonix结合hbase