JAVA学习--面向对象的特征三:多态性

* 面向对象的特征三:多态性
 * 1.多态性指的是什么?多态性,可以理解为一个事物的多种表型形态。
 *  
1)方法的重载与重写  2)子类对象的多态性
 *
 * 2.子类对象的多态性使用的前提:①要有类的继承②要有子类对父类方法的重写
 *
 * 3.程序运行分为编译状态和运行状态。
 *  
对于多态性来说,编译时,"看左边",将此引用变量理解为父类的类型
 *  
运行时,"看右边",关注于真正对象的实体:子类的对象。那么执行的方法就是子类重写的。
 *   
 * 4.子类对象的多态性,并不使用于属性。

  1 public class TestPerson {
  2     public static void main(String[] args) {
  3         Person p = new Person();
  4         p.eat();
  5         p.walk();
  6
  7         Man m = new Man();
  8         m.eat();
  9         m.walk();
 10         System.out.println();
 11
 12         // 子类对象的多态性:父类的引用指向子类对象
 13         Person p1 = new Man();// 向上转型
 14         // 虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
 15         p1.eat();
 16         p1.walk();
 17         System.out.println("$" + p1.id);//1001
 18
 19 //        p1.smoking = null;
 20         // p1.entertainment();
 21
 22         Person p2 = new Woman();
 23         p2.eat();
 24         p2.walk();
 25         // p2.shopping();
 26         Woman w = (Woman) p2;// 向下转型,使用强转符:()
 27         w.shopping();
 28
 29         // java.lang.ClassCastException
 30         // Woman w1 = (Woman)p1;
 31         // w1.shopping();
 32
 33         // Woman w2 = (Woman)new Man();
 34         // instanceof:
 35         // 格式: 对象a instanceof 类A:判断对象a是否是类A的一个实例.是的话,返回true;否则返回false
 36         // 若a是A类的实例,那么a也一定是A类的父类的实例。
 37         if (p1 instanceof Woman) {
 38             System.out.println("hello!");
 39             Woman w1 = (Woman) p1;
 40             w1.shopping();
 41         }
 42
 43         if (p1 instanceof Man) {
 44             Man m1 = (Man) p1;
 45             m1.entertainment();
 46         }
 47
 48         if (p1 instanceof Person) {
 49             System.out.println("你好!");
 50         }
 51
 52     }
 53
 54     public void show(Person p) {//Person p = new Man();
 55
 56     }
 57
 58
 59
 60 class Person {
 61     private String name;
 62     private int age;
 63     int id = 1001;
 64     public Person() {
 65         super();
 66     }
 67     public Person(String name, int age) {
 68         super();
 69         this.name = name;
 70         this.age = age;
 71     }
 72     public String getName() {
 73         return name;
 74     }
 75     public void setName(String name) {
 76         this.name = name;
 77     }
 78     public int getAge() {
 79         return age;
 80     }
 81     public void setAge(int age) {
 82         this.age = age;
 83     }
 84
 85     public void walk(){
 86         System.out.println("人走路");
 87     }
 88     public void eat(){
 89         System.out.println("人吃饭");
 90     }
 91
 92 }
 93
 94
 95
 96
 97 class Man extends Person{
 98      boolean smoking;
 99      int id = 1002;
100     public Man() {
101         super();
102     }
103
104     public Man(boolean smoking) {
105         super();
106         this.smoking = smoking;
107     }
108
109     public boolean isSmoking() {
110         return smoking;
111     }
112
113     public void setSmoking(boolean smoking) {
114         this.smoking = smoking;
115     }
116
117     public void walk(){
118         System.out.println("男人笔挺的走路");
119     }
120     public void eat(){
121         System.out.println("男人应该多吃肉!");
122     }
123
124     public void entertainment(){
125         System.out.println("男人请客");
126     }
127 }
128
129
130 class Woman extends Person{
131     private boolean isBeauty;
132
133     public boolean isBeauty() {
134         return isBeauty;
135     }
136
137     public void setBeauty(boolean isBeauty) {
138         this.isBeauty = isBeauty;
139     }
140
141     public Woman() {
142         super();
143     }
144
145     public Woman(boolean isBeauty) {
146         super();
147         this.isBeauty = isBeauty;
148     }
149     public void walk(){
150         System.out.println("女人窈窕的走路。。。");
151     }
152
153     public void eat(){
154         System.out.println("女人应该少吃,减肥");
155     }
156     public void shopping(){
157         System.out.println("女人爱购物");
158     }
159
160 }
时间: 2024-12-25 17:10:14

JAVA学习--面向对象的特征三:多态性的相关文章

JAVA学习--面向对象的特征二:继承性

* 一.面向对象的特征二:继承性 * 1.为什么要设计继承性?  *  * 2.通过"class A extends B"类实现类的继承.  *   子类:A  父类(或基类 SuperClass):B  *     * 3.子类继承父类以后,父类中声明的属性.方法,子类就可以获取到.  *    明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接  *        调用罢了.  *   子类除了通过继承,获取父类的结构之外,还可以定义

Java学习之Xml系列三:dtd校验、改、增、删

见摘要.见代码注释,其他话不多说: DTD文档: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT SwordLibrary (Sword*)> <!ELEMENT Sword (SwordName,Price,Attack)> <!ELEMENT SwordName (#PCDATA)> <!ELEMENT Price (#PCDATA)> <!ELE

5.2-全栈Java笔记:面向对象的特征(一)继承 | 下

上节我们聊到「Java面向对象的特征:继承」这节我们继续聊一下继承的应用. Object类 Object类基本特性 Object类是所有Java类的根基类,也就意味着所有的JAVA对象都拥有Object类的属性和方法.如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类. [示例1]Object类 public class Person { ... } //等价于: public class Person extends   Object { ... } toStrin

5.1-全栈Java笔记:面向对象的特征(一)继承 | 上

JAVA面向对象进阶 本章重点针对面向对象的三大特征:继承.封装.多态,进行详细的讲解.很多概念对于初学者来说,更多的是先进行语法性质的了解,不要期望,通过本章学习就"搞透面向对象".本章只是面向对象的起点,后面所有的章节说白了都是面向对象这一章的应用. 老鸟建议 建议大家,学习本章,莫停留!学完以后,迅速开展后面的章节.可以说这么说,以后所有的编程都是"面向对象"的应用而已! 继承(extend) 继承的实现 继承让我们更加容易实现类的扩展. 比如,我们定义了人类

使用Java实现面向对象编程——第三章 多态

1.多态:(polymorphism): 是具有表现多种形态能力的特征: (专业化的说法:)同一个实现接口(引用类型),使用不同的实例而执行不同的操作 指一个引用(类型)在不同情况下的多种状态.也可以理解成:多态是指通过指向父类的指针,来调用在不同子类中实现的方法. 多态是同一个行为具有多个不同表现形式或形态的能力, 多态就是同一个接口,使用不同的实例而执行不同操作,多态性是对象多种表现形式的体现. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性 3. 可扩充性 4. 接口性 5.

JAVA学习面向对象之 扑克牌(初)

感想: 一开始不了解或者说是对JAVA的特性不熟悉,不知道类与类之间的联系,对JAVA的封装,继承,多态不熟悉和没有更好的理解,在以后的学习过程中要掌握并熟悉JAVA的开发习惯, 在写代码过程中还有众多东西没有掌握,靠着老师和同学的帮助完成这次学习,初步了解了JAVA面向对象开发的基本要领.写这个博客以便于自己今后学习,也算是一段美好的回忆吧! 上面是一个类图  表示着写这个程序的只要思路. Card类:他的下级是cardview上级是player,有着一定的关系 package com.cqv

Java入门——面向对象基础(三)

Java入门——抽象类与接口的应用 本Blog内容 为抽象类与接口实例化 抽象类的实际应用——模板设计 接口的实际应用——制定标准 设计模式——工厂设计 设计模式——代理设计 为抽象类与接口实例化 利用多态性 1 package Sep16; 2 3 public class AbstractCaseDemo1 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-gene

JAVA学习--面向对象思想的落地法则

* 面向对象思想的落地法则一:  * 1.设计类,并设计类的成员(成员变量&成员方法)  * 2.通过类,来创建类的对象(也称作类的实例化)  * 3.通过“对象.属性” 或“对象.方法”来调用,完成相应的功能  *  * 二.创建的多个对象,彼此各自拥有一套类的属性.当对其中一个对象的属性进行修改时,  * 不会影响到其他对象的属性值.  *  * 三.类的属性(成员变量)  *   成员变量 vs 局部变量  *   相同点:1.遵循变量声明的格式: 数据类型 变量名 = 初始化值  * 

Java学习之路(三) 运算符、控制语句

运算符 算术运算符: +.-.*./.%.++.-- .对于++  -- 只能操作一个变量,如i++等同于i=i+1,(先加后用),++i(先拿来用,再把变量+1),--用法和++一样. 赋值运算符:= .+=. -=. *=. /=. %=. >>= .<<=. &=. |=. ^= 的优先级别低于其他的运算符,所以对该运算符往往最后读取.可以与所有的双目运算符结合,就形成了扩展后的赋值运算符.两个运算符之间不能有空格.赋值运算符左边为变量,右边为被赋的值. 位运算符是基