首页 > 编程语言 >20-面向对象编程-多态

20-面向对象编程-多态

时间:2023-08-18 18:13:09浏览次数:38  
标签:20 面向对象编程 void cry 多态 say animal public

面向对象编程有三大特征:封装、继承和多态

 

访问修饰符可以控制属性的访问范围

public:表示公共访问级别,可以被任何类访问。

protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。

default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包中的类访问。

private:表示私有访问级别,只能在类内部访问。

修饰符 子类 其他包
public
protected ×
default × ×
private × × ×

 

多态介绍

方法或对象具有多种形态,多态是建立在封装和继承基础之上的。

换句话说,多态可以理解为事物的多种形态,同一个行为具有不同的表现形式或形态的能力。

 

例如:打印机分为黑白打印机和彩色打印机,在黑白打印机情况下打出来为黑白,在彩色打印机情况下打印出来为彩色

 

1. 方法的多态(方法的重载和重写)

public class PolyMethod {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();

        //1.方法的重载体现多态
        //这里我们传入不同的参数,就会调用不同的sum方法
        System.out.println(b.sum(10,20));  //30
        System.out.println(b.sum(10,20,30));  //60

        //2.方法的重写体现多态
        a.say();  //父类A的say方法被调用
        b.say();  //子类B的say方法被调用
    }
}

class A {
    public void say(){
        System.out.println("父类A的say方法被调用");
    }
}

class B extends A {
    //方法重载
    public int sum(int n1, int n2){
        return n1 + n2;
    }
    public int sum(int n1, int n2, int n3){
        return n1 + n2 + n3;
    }
    //方法重写
    public void say(){
        System.out.println("子类B的say方法被调用");
    }
}

2. 对象的多态

1) 一个对象的编译类型和运行类型可以不一致

2) 编译类型在定义对象时,就确定了,不能改变

3) 运行类型是可以变化的

4) 编译类型是看定义时 “=” 等号的左边,运行类型是看 “=” 等号的右边

public class PolyMethod {
    public static void main(String[] args) {
        //对象的多态
        //1.animal的编译类型是 Animal,animal的运行类型是 Dog
        Animal animal = new Dog();
        //当代码执行到当前行时,animal的运行类型时Dog,所以cry方法是Dog类cry方法
        animal.cry();  //Dog  cry   小狗汪汪叫...

        //2.此时,animal的运行类型是 Cat,但编译类型仍然是 Animal
        animal = new Cat();
        //当代码执行到当前行时,animal的运行类型时Cat,所以cry方法是Cat类cry方法
        animal.cry();  //Cat   cry   小猫喵喵叫...
    }
}

class Animal{
    public void cry(){
        System.out.println("Animal   cry   一直在叫...");
    }
}
class Cat extends Animal{
    @Override
    public void cry(){
        System.out.println("Cat   cry   小猫喵喵叫...");
    }
}
class Dog extends Animal{
    @Override
    public void cry(){
        System.out.println("Dog  cry   小狗汪汪叫...");
    }
}

 

标签:20,面向对象编程,void,cry,多态,say,animal,public
From: https://www.cnblogs.com/REN-Murphy/p/17641165.html

相关文章

  • 2023年Android中高级最全面试题(含大厂原题+解析)
    前言又快要到了一年一度的金九银十黄金跳槽时节,也是互联网大厂疯狂招人的时期,现在应该有很多Android程序员已经按耐不住了。但是现在网上的面试题资料太多了,而且有些面试题已经过时甚至是漏洞百出。今天结合自己前段时间的面试经历和几位大厂大佬交流讨论总结出这份2023年Android中......
  • 2023-08-18:用go写算法。你会得到一个字符串 text, 你应该把它分成 k 个子字符串 (subte
    2023-08-18:用go写算法。你会得到一个字符串text,你应该把它分成k个子字符串(subtext1,subtext2,…,subtextk)。要求满足:subtexti是非空字符串,所有子字符串的连接等于text,(即subtext1+subtext2+...+subtextk==text),subtexti==subtextk-i+1表示所有i的有......
  • 2023-08-18:用go写算法。你会得到一个字符串 text, 你应该把它分成 k 个子字符串 (subte
    2023-08-18:用go写算法。你会得到一个字符串text,你应该把它分成k个子字符串(subtext1,subtext2,…,subtextk)。要求满足:subtexti是非空字符串,所有子字符串的连接等于text,(即subtext1+subtext2+...+subtextk==text),subtexti==subtextk-i+1表示所有......
  • 8.18-零件出图(水路出图-线割出图)-顶出距离=产品最深胶位+15 ( 相加不满20设置为20 )
    上下顺序是:零件出图-水路出图-线割出图  ......
  • 2023年爬虫有哪些好用的付费代理IP?芝麻代理品易代理快代理熊猫代理……
    在我加班到凌晨2点的时候,第N次收到HTTP代理返回:项目是没办法接着做了,回家也是不可能回家的,烦得很一时半会还没想走,这种情况谁懂?开始知乎摸鱼,翻到这个:哈?这不就是1*88源头厂家的意思?????说这个我可就立马福尔摩斯附体了啊,今天我可非得找到你这个家伙!中间曲折的过程我就不重复说了,直接给我......
  • The 2022 ICPC Asia Regionals Online Contest (II) EJFB
    The2022ICPCAsiaRegionalsOnlineContest(II)EAnInterestingSequence232323232323323232323232#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;voidsolve(){ lln,k; cin>>n>>k; llres=k; llt=0; for(......
  • \\NSHA10320UAP.ubsglobal-prod.msad.ubs.net\d$\data\部署包\组件全量0818\组
    com.yss.ams.bbzx-202308031009-V2.0.0.10.39-20221115.jarcom.yss.ams.reportConfigSetting-20230714135143.jarcom.yss.ams.ReportViewer-202308031009-V2.0.0.10.39-20221115.jarcom.yss.ams.website-202308031009-V2.0.0.10.39-20221115.jarcom.yss.sofa.foundation.autho......
  • 吴恩达机器学习2011版本学习笔记
    这是看完视频后,按自己的理解做了笔记。监督学习学的比较认真,33之后的无监督学习心态已经浮躁了,以后要再学一遍2022最新版视频课。1,有正确答案是有监督学习,反之是无监督学习2,模型就是把训练数据拟合为一个公式(严格来说是个函数,关系)。入门的拟合的方法是最小二乘法,先假设一个公式,......
  • [THUPC2022 初赛] 造计算机
    题目传送门更好的阅读体验思路结论:如果序列原先就合法,答案为\(0\);否则,最多使用两个寄存器。我们对\(i\rightarrowa_i\)建边得到若干个环,我们单独考虑一个环如何操作。对于一个长度为\(4\)的数列,再包含两个寄存器,设两个寄存器的值分别为\(x,y\)。显然\(4,1,3\)......
  • [SWPUCTF 2021 新生赛]error
    [SWPUCTF2021新生赛]error题目来源:nssctf题目类型:web涉及考点:SQL注入1.题目给了一个输入框,随便传点东西通过上面三次传入,我们可以判断闭合类型为单引号闭合发现没有回显位,但有报错提示,因此尝试报错注入2.extractValue()报错注入爆库名1'unionselect1,ext......