7.Java面向对象-多态

一、多态的概述及其代码体现

A:多态概述某一个事物,在不同时刻表现出来的不同状态。举例:         Cat c=new Cat();Animal a=new Cat();猫可以是猫的类型。猫 m = new 猫();同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();
B:多态前提a:要有继承关系。b:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。c:要有父类引用指向子类对象。父 f =  new 子();
C:案例演示代码体现多态

二、多态中的成员访问特点

A:多态中的成员访问特点a:成员变量编译看左边,运行看左边。b:构造方法创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。c:成员方法编译看左边,运行看右边。d:静态方法编译看左边,运行看左边。(静态和类相关,算不上重写,所以,访问还是左边的)
B:案例演示多态中的成员访问特点
package org.westos.java6;//测试类
public class Test {public static void main(String[] args) {Person student=new Student();System.out.println(student.age);//0student.eat();student.sleep();student.show();//静态方法不算重写 运行父类的静态方法 person//student.play(); 报错 无法使用个性化方法}
}
package org.westos.java6;//父类
public class Person {int age; // 0String name; // nullpublic static void show(){System.out.println("person");}public void eat(){System.out.println("eat");}public void sleep(){System.out.println("sleep");}public Person(int age, String name) {this.age = age;this.name = name;}public Person() {}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
package org.westos.java6;//子类
public class Student extends Person {int age=10;public static void show(){System.out.println("student");}@Overridepublic void eat() {System.out.println("write");}@Overridepublic void sleep() {System.out.println("read");}public Student(int age, String name) {super(age, name);}public Student() {super();}//个性化方法public void play(){System.out.println("game");}
}

三、多态的好处

A:多态的好处a:提高了代码的维护性(继承保证)b:提高了代码的扩展性(由多态保证)
B:案例演示多态的好处
D:案例演示多态的弊端
package org.westos.java7;//测试类
public class Test {public static void main(String[] args) {//展示了多态的扩展性,保留了方法重写的内容Animal cat=new Cat();Animal dog=new Dog();AnimalUtil.fangfa(cat);AnimalUtil.fangfa(dog);System.out.println("=======================================");
/*        Cat cat1 = new Cat();Dog dog1 = new Dog();cat1.util(cat1);dog1.util(dog1);*/}
}
package org.westos.java7;//动物类
public class Animal {int age;String name;char sex;public void eat(){System.out.println("eat");}public void play(){System.out.println("play");}
}
package org.westos.java7;//猫类
public class Cat extends Animal{@Overridepublic void eat() {System.out.println("fish");}@Overridepublic void play() {System.out.println("bed");}public void util(Cat cat){cat.eat();cat.play();}
}
package org.westos.java7;//狗类
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("meat");}@Overridepublic void play() {System.out.println("ball");}public void util(Dog dog){dog.eat();dog.play();}
}
package org.westos.java7;//动物工具类
public class AnimalUtil {//展示了多态的扩展性public static void fangfa(Animal animal){animal.eat();animal.play();}
}

四、多态的弊端以及多态中向上转型和向下转型

A:通过多态的弊端引出问题不能使用子类特有的功能
B:解决问题a:把父类的引用强制转换为子类的引用。(向下转型)
C:案例演示详细讲解多态中向上转型和向下转型
package org.westos.java7;//案例演示 孔子装爹
/** 孔子爹,是西开资深金牌Java讲师,很多学员慕名前来学习Java, 张三,家里很有钱,到孔子爹的家里,把孔子爹请去他的家里讲课去了。* 家里就剩孔子一个人在玩吃鸡游戏,那么这个时候,李四也来到了孔子爹的家里。想请孔子爹去他家里讲课。* 孔子爹,不在家了,孔子不想失去这个学员,就乔装打扮一番,装扮成他爹的模样,去李四家里给将Java,实际上给讲的是论语。* 讲完之后,孔子回到家里,觉得装他爹太累了,想做回自己,于是卸下装扮,痛快的玩了一把游戏* */
public class kongzi {public static void main(String[] args) {Fu fu = new Fu();fu.abilty(); // teach java//乔装打扮一番,装扮成他爹的模样,去李四家里给将Java,实际上给讲的是论语。Fu zi=new Zi();System.out.println(zi.age); // 80zi.abilty(); // teach lunyu//zi.play(); 报错 不能使用个性化方法//觉得装他爹太累了,想做回自己,于是卸下装扮,痛快的玩了一把游戏//向下转型Zi kongzi = (Zi) zi;System.out.println(kongzi.age); // 60kongzi.play(); // game}
}
class Fu{int age=80;public void abilty(){System.out.println("teach java");}
}
class Zi extends Fu{int age=60;@Overridepublic void abilty() {System.out.println("teach lunyu");}public void play(){System.out.println("game");}
}
//A:看下面程序是否有问题,如果没有,说出结果class Fu {public void show() {System.out.println("fu show");}}class Zi extends Fu {public void show() {System.out.println("zi show");}public void method() {System.out.println("zi method");}}class DuoTaiTest3 {public static void main(String[] args){Fu f = new Zi();f.method(); //报错 ,不能直接调用子类特有的方法f.show(); //zi show}}
//B:看下面程序是否有问题,如果没有,说出结果class A {public void show() {show2();}public void show2() {System.out.println("我");}}class B extends A {public void show2() {System.out.println("爱");}}class C extends B {public void show() {super.show();}public void show2() {System.out.println("你");}}public class DuoTaiTest4 {public static void main(String[] args) {A a = new B();a.show(); // 爱B b = new C();b.show();// 你}}

7.Java面向对象-多态相关推荐

  1. java面向对象多态特性

    一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同 ...

  2. Java面向对象 ----多态

    java的第二部分 面向对象----多态 4.1面向对象的第三个特征: 多态定义: 多态可以理解为某一类事物的多种存在形态. 例如: 人 可以分为 男人 女人 动物 猫 狗 等 粮食 大米 小麦等 举 ...

  3. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态

    ​ 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...

  4. java面向对象多态和内部类的深入学习

    一.多态 1.类的多态 需求: 需求:老师骑着自行车上班 分析:老师类.自行车类 需求升级/迭代:自行车->小汽车 步骤: 1.创建Car类,编写start.stop 2.在原有Teacher类 ...

  5. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  6. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  7. Java面向对象(二)面向对象的特征 --- 封装 、 继承、 多态

    面向对象的特征:封装.继承.多态.(抽象) 一.封装 体现形式: 函数 --- 提高代码的复用性. 属性的私有化 --- 将属性设为私有,通过提供对外的访问方法来间接操作对象属性,可以再方法内对属性做 ...

  8. java 多态_Java面向对象 —— 多态

    前两天已经相继介绍了Java面向对象的三大特性之中的封装.继承,所以今天就介绍Java面向对象的三大特性的最后一项,多态~ 首先讲一下什么是多态,以及多态需要注意的细节 什么是多态:一个对象具备多种形 ...

  9. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

最新文章

  1. pyplot.plot画图turtouil
  2. Win2000 Win2003安装卡巴斯基6.0
  3. transformcontrols可以用在group上吗_电缆沟盖板可以用在水沟上吗
  4. 前端学习(652):运算符导读
  5. Linux 高可用(HA)集群之keepalived
  6. 澳洲虚拟主机空间_澳洲空间|澳洲虚拟主机|澳洲主机|澳洲虚拟空间-万纵科技 www.xmwzidc.cn...
  7. C++ STL 容器的一些总结 --- set(multiset)和map(multimap)
  8. h0152. 故事计算题(计蒜客——西邮K题)解析
  9. 在Java中Vector和ArrayList的区别
  10. Maven(3)---Maven POM
  11. ctfshow-萌新-web5( 利用位运算符控制SQL获取网站敏感信息)
  12. Linux开发终端霓虹灯效果
  13. h3c交换机堆叠(IRF)配置三步完成
  14. python青少年编程比赛_有哪些编程比赛适合青少年参加和锻炼的?
  15. 走进全球互联网中枢,顶级域名服务器的分布
  16. 对于一个大数据应用项目/产品的落地,可以大致总结为五大步骤阶段?
  17. JZOJ 5426 Galo
  18. 树的三叉链的创建和遍历
  19. bootstrap-table自定义列排序
  20. 破解RVDS2 2方法分享

热门文章

  1. IDEA运行jsp出现源码问题解决
  2. 半钧先生:《请回答1988》
  3. charm-crypto 介绍
  4. FILE *fopen
  5. leetcode算法题之:宝石与石头
  6. 第7关:数据的基本操作——去重
  7. android gridview设置高度,android设置GridView高度自适应,实现全屏铺满效果
  8. SWT Browser
  9. Matroska文件解析之SimpleBlock
  10. 河南大学计算机院实训安排,关于做好 2019-2020学年本科生实习工作的通知