面向对象 多态

面向对象 多态的概述及其代码的体现

  • A:多态(polymorphic)概述
    • 事物存在的多种形态
  • B:多态前提
    • 要有继承关系
    • 要有方法重写
    • 要有弗雷引用指向子类对象。
  • C:案例演示

    • 代码体现多态
      public class Dome1 {
      public static void main(String[] args) {Cat c = new Cat();c.eat();Animal a = new Cat();   //父类引用指向子类对象a.eat();最后的输出结果为  Cat  这个类中的eat方法语句;这里的的Cat是Animal的一种,所以可以理解为a.eat();为调用Cat方法。}
      }
      class Animal {
      public void eat()
      {System.out.println("动物吃饭");}
      }
      class Cat extends Animal {
      public void eat()
      {System.out.println("猫吃鱼");
      }}  

面向对象 多态中的成员访问特点之成员变量

  • 成员变量
    • 编译看左边(父类),运行看左边(父类);
    public class Demo2 {public static void main(String[] args) {Father f = new Son();System.out.println(f.num);//结果为  10;    Son s = new Son();System.out.println(s.num);//结果为  20;}}/*成员变量编译看左边(父类),运行也看左边(父类);      */class Father{int num = 10;}class Son extends Father{int num = 20;}

面向对象 多态中的成员访问特点之成员方法

  • 成员方法
    • 编译看左边(父类),运行看右边(子类);
    public class Demo2 {public static void main(String[] args) {Father f = new Son();f.print();//结果为 son;}}/*成员方法编译看左边(父类),运行看右边(子类);*/class Father{int num = 10;public void print() {System.out.println("father");   }}class Son extends Father{int num = 20;public void print() {System.out.println("son");  }
}
package beysdasxw;public class Test1_Demo {public static void main(String[] args) {Fu f = new Zi();//  f.method();//成员方法,编译看左边(父类)没有method方法,所以会出现编译错误;f.show();}}
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");}
}

面向对象 多态中的成员访问特点之成员方法

  • 静态方法
    • 编译看左边(父类),运行看左边(父类)。
    • (静态和类相关,算不上重写,所以,访问还是左边的)
    • 只有非静态的成员方法,编译看左边,运行看右边。
    public class jingtai {public static void main(String[] args) {        Father f = new Son();f.method();//相当与Father。net后的();}}   /*静态方法编译看左边(父类),运行看左边(父类)。(静态和类相关,算不上重写,所以,访问还是左边的)只有非静态的成员方法,编译看左边,运行看右边。 */class Father {int num = 10;public void print(){System.out.println("Father");}   public static void method(){System.out.println("Father static method");} }class Son extends Father{int num = 20;   public void print(){System.out.println("son");}   public static void method(){System.out.println("Son static method");}}

面向对象(多态中的向上转型和向下转型)

  • A:案例分析
    • Person p = new SuperMan();//向上转型
    • SuperMan sm = (SuperMan)p;//向下转型
      只有向上转型之后才可以向下转型;
    public class Dome_SuperMan {public static void main(String[] args) {Person p =   new SuperMan();   //父类引用指向子类对象,超人提升为了人System.out.println(p.name);//父类引用指向子类对象就是向上转型p.谈生意();SuperMan sm = (SuperMan)p;//向下转型sm.fly();/*基本数据类型自动类型提升和强制类型转换*/int i =10;byte b= 20;//i = b;        //自动类型提升//b= (byte) i;  //强制类型转换;}}class Person{String name = "John";public void 谈生意(){System.out.println("谈生意");}}class SuperMan extends Person{String name = "SuperMan";public void 谈生意(){System.out.println("谈几个亿的大单子");}public void fly(){System.out.println("飞出去救人");}}
    public static void main(String[] args) {//Cat c = new Cat ();//c1.eat();method (new Cat());method (new Dog()); //Animal a = new Cat(); 开发的是很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中特有的属性和行为}    // Cat c = new Dog();  狗是一只猫,这是错误的  /*  public static void method(Cat c){ c.eat();}public static void method(Dog d){d.eat();    }*///如果吧狗强制转成猫就会出现类型转换异常,ClassCastException    public static void method(Animal a){//当作参数的时候用多态最好,因为拓展性强  /*Cat c = (Cat)a;c.eat();c.catchMouse();*/       //关键字 instanseof 判断前边的引用是否是后面的数据类型  if(a instanceof Cat){Cat c = (Cat)a;c.eat();c.catchMouse();}else if(a instanceof Dog){Dog d = (Dog)a;d.eat();d.lookHome();}else {a.eat();}       }
}
/** A:多态的好处* a;提高了代码的维护性(继承保证)* b;提高了代码的拓展性(由多态保证) * B;案例演示* 多态的好处* 可以当作形式参数,可以接收任意子类对象* C;多态的弊端* 不能使用子类的特有属性和行为       */class Animal{public void eat(){System.out.println("动物吃饭");}   }class  Cat extends Animal{public void eat(){System.out.println("猫吃鱼");}   public void catchMouse(){System.out.println("抓老鼠");}}class Dog extends Animal{public void eat(){System.out.println("狗吃肉");}   public void lookHome(){System.out.println("看家");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发入门

想要学习Web开发,我的建议是参照Web应用的发展历史学习。最早的时候,Web应用就是静态的Html页面,不能和用户交互,这是因为它最早是各高校用来分享论文的载体。后来,随着Internet的流行,Web应用的用户不再单…

算法和程序的区别

算法 计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。 算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入&…

【图论】(二分图)J. Burnished Security Updates - CodeForces

J. Burnished Security Updates 题意:对于所给的图(不一定连通),选择一些点作为一个集合,满足每条边有且仅有一个端点为该集合的点,要求计算该集合大小的最小可能,若无法找到一个集合满足条件则…

万网与阿里巴巴业务关系图解

阿里巴巴在港上市公司今天发布公告称,计划分拆旗下中国万网赴美上市。那么万网与阿里巴巴其它业务是怎样个关系?且看我们分析。 随着传统企业大面积地转向互联网经营,用电子商务来服务客户,它们面临的第一个问题就是建站。针对这一…

c中将数组传递给子函数_在C ++中将对象传递给Non-Member函数

c中将数组传递给子函数Here, we have to define a Non-Member Function, in which we have to pass an Object to the class in C programming language. 在这里,我们必须定义一个非成员函数,其中必须将一个Object传递给C 编程语言的类。 What we are d…

大数问题(C++、Java)

有时候,当我们做题的时候会遇到很简答的代码题,例如AB,但是题是有前提的,就是两个数特别的大。妈耶~~~ 大家都知道,定义一个变量,系统会自动为该变量分配空间,例如:int类型在c中&am…

cobalt strick 4.0 系列教程(4)---监听器和基础设施管理

0x01 概述 任何行动的第一步都是建立基础设施。就 Cobalt Strike 而言,基础设施由一个或多个团队服务器、重定向器以及指向你的团队服务器和重定向器的 DNS 记录组成。一旦团队服务器启动并运行,你将需要连接到它并将其配置为接收来自受害系统的连接。监…

【竞赛题解】Codeforces Round #710 (Div. 3)

B. Partial Replacement 题意:有字符串由.和*组成,可标记其中*,首尾的*必须被标记,使被标记的*之间距离不超过k,求最少的标记量 思路:首先从首尾出发确定首尾*的位置,再由首beg出发向后的k个元…

Oracle数据库存储过程 ,去除给定字符串中重复的字符串

以下函数是本人在编写Oracle数据库存储过程时写的函数,觉得该函数通用性较强,因此发表出来供需要的人参考.这个函数的功能主要是用于去除给定字符串中重复的字符串.在使用中需要指定字符串的分隔符.示例:str : MyReplace(13,14,13,444, ,);输出:13,14,444create or replace fun…

基于RBAC模型的通用企业权限管理系统

1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁。构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的。权限管理系统是管理信息系统中代码重用性最高的模块…

面向对象 抽象(abstract)

面向对象 抽象(abstract) 抽象类的概述 A:抽象类概述 抽象就是看不懂的 B:抽象类特点 a:抽象类和抽象方法必须用abstract关键字修饰 abstract class 类名 {}public abstract void eat();b:抽象类不一定有抽象方法,有抽象方法的类一定是抽…

密码学加密算法分类_密码学中的国际数据加密算法(IDEA)

密码学加密算法分类Introduction 介绍 International Data Encryption Algorithm (IDEA) is a type of cryptography as a block cipher algorithm designed by "Xuejia Lai" and "James L.Massey" of ETH-Zrich and was first published in the 1991 yea…

如何定位溢出点位置

程序&#xff1a; #include <stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[20];read(0,str,50);printf("the str is:%s\n",str); } int main() {func();return 0; }关掉保护机制&#xff1a; gcc -no-pie -fno-stack-pro…

.net知识和学习方法系列(六)关于数值类型

过年总是忙&#xff0c;没有更多的时间来写博客&#xff0c;不过还是挺想念这块地方的。 本次博客说一下数值类型吧&#xff01; 不管那种语言&#xff0c;都为数据类型一说&#xff0c;在C#中也是&#xff0c;不过C#的数据类型分了两类&#xff0c;一是值类型&#xff0c;一是…

【竞赛题解】2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)

B 找山坡 题意&#xff1a;在数组中找到两相等元素相距最大的距离且这两元素间的元素都不小于该两端值 思路&#xff1a;采用单调栈 例如&#xff1a;a[] { 2 3 5 4 6 3 }&#xff0c;栈内存储元素的坐标&#xff08;从1开始&#xff09;&#xff0c;便于计算距离 首先将a[…

[转]JAVA AES 加密算法

本文转自&#xff1a;http://blog.sina.com.cn/s/blog_7c8eb1590100svr0.html package com.siro.tools;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64E…

java中Scanner类中 next()与nextLine()的区别

问题&#xff1a;提示用户输入一个英文字符串或者要解密的字符串&#xff0c;然后通过扫描仪获取用户输入的字符串&#xff0c;经过加密或者解密后&#xff0c;把字符串输出。 import java.util.Scanner;public class Encryption {public static void main(String[] args) {Sca…

操作系统中的处理机调度调度_操作系统中的流程分类和调度

操作系统中的处理机调度调度处理 (Process) In the operating system, there are numerous task and application program run simultaneously. A program is stored in the hard disk or any other form of secondary storage. When the program is executed it must be loade…

NX机制及绕过策略-ret2libc

程序&#xff1a; 1.c #include <stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[0x20];read(0,str,0x50); } int main() {func();return 0; }0x01 NX介绍 溢出攻击的本质在于冯诺依曼计算机模型对数据和代码没有明确区分这一先天性缺…

网站SEO策略的制定

在对一个网站做SEO的时候&#xff0c;SEO技术水平类似的人&#xff0c;营销效果可能天壤之别&#xff0c;这是因为网站SEO策略的制定的不同&#xff01;-----这个是最根本的。 SEO技术非常的简单&#xff0c;因为SEO不是去寻找搜索引擎的漏洞&#xff0c;而是根据搜索引…