多态,面向对象


/**
 *  里氏替换原则 :
 *      能使用父类的地方,一定可以使用子类
 *  什么是多态 :
 *          父类的引用,指向子类的对象
 *  多态的前提条件 :
 *          有继承关系的两个类
 *  多态的目的 :
 *        ☆☆☆  代码的重用
 *  多态发什么在什么时候 :
 *          赋值的时候
 *  
 * !!!!!!!!! 多态中的 ☆☆☆  覆写 是特指的 成员方法!!!!!!!!!
 *  什么是覆写 :
 *          就是在子类有个和父类相同的方法 : 方法名 , 参数列表 , 返回值类型 (和修饰符列表没关系)
 *              1 方法名相同 : 不相同,就是两个不一样的方法了  不是覆写
 *              2 参数列表相同 : 参数列表不同,就是方法的重载了,也不是覆写
 *                               参数列表的 个数 和 数据类型 都相同 才叫相同吧
 *              3 返回值类型相同 ; 返回值代表函数(方法)的功能,覆写是为了功能更强大,不能降低功能,所以必须相同
 *          覆写之后 不能比原有的方法有更低的访问权限 ( 权限的降低 就意味着 功能的降低 )
 *          覆写之后 不能比原有的方法有更宽泛的异常 ( 只能异常越来越低 )
 *
 *!!!!! ☆☆☆ 父类的属性列表是在编译的时候就生成了 : 就是javac的时候☆☆☆
 *!!!!! ☆☆☆ 子类的属性列表是在运行时才生成 : 就是java运行的时候☆☆☆
 *
 *  父类和子类的调用有两种形式 :
 *         1 多态 父类引用指向子类的对象  父类型 变量名 = new 子类构造方法();
 *              静态变量,静态方法,成员变量 :
 *                                         当这样用引用变量名去调用方法或者变量时 , 先去父类找,如果有这个变量(方法).就会直接执行,不会再去子类中找,如果父类没有这个变量(方法),直接报错( 错误 : 找不到符号 ),不会去子类中找,因为现在子类的属性列表还没有,现在是编译期报错,所以没法去子类找
 *              成员方法 :
 *                       当调用成员方法的时候,先去父类中找,父类如果有,再去子类中找,如果子类覆写了成员方法,就执行子类的成员方法,如果子类没有覆写,就还执行父类的,但是如果父类没有的成员方法,但是子类有,直接报错( 错误 : 找不到符号 ),不会去子类找(不会执行子类特有的成员方法),因为子类现在还没有属性列表,现在只是在编译期报错.
 *          2 直接实例化  子类型 变量名 = new 子类构造方法();
 *              静态变量,静态方法,成员变量 :
 *                                         先去子类找,如果子类有这个变量(方法),就执行,不会再去父类找,如果子类没有这个变量(方法),就会去父类找,执行父类,但是如果子类和父类都没有,就报错( 错误 : 找不到符号 )
 *              成员方法 :
 *                       如果子类有,父类也有,就按子类的执行,那是方法的覆写  ,如果子类没有,就去父类找,执行父类的,如果子类有,父类没有,就执行子类的(用于执行子类特有的方法,是父类没有的),如果都没有,就报错( 错误 : 找不到符号 )
 *
 */

下面是代码 :


public class Duo_Tai{
    public static void main(String[] args){
        //第一种 多态 父类引用 指向子类的对象
        Fu_Lei f = new Zi_Lei();

         //--------------------变量------------------------------

            //父类有的 子类没有的 静态变量
            int i = f.i;
            System.out.println( i ); // 输出100  是 父类的 静态变量

            //父类有的 子类也有的 静态变量
            int a = f.a; //这里的两个变量 不会冲突 因为前面那个int a 是局部变量  后面那个f.a 是类中的静态变量
            System.out.println( a ); //输出1  是 父类的 静态变量 为什么输出的不是子类的 111

            //父类有的 子类没有的 成员变量
            int j = f.j;
            System.out.println( j );//输出200 是 父类的 成员变量

            //父类有的 子类也有的 成员变量
            int b = f.b;
            System.out.println( b );//输出2 是 父类的 成员变量 为什么输出的不是子类的 2222
            /*
            //父类没有 子类有的 静态变量  为什么?为什么不去调用子类的?
           int m = f.m;  //Duo_Tai.java:48: 错误: 找不到符号
            System.out.println( m );

            //父类没有 子类有的 成员变量  为什么?为什么不去调用子类的?
            int n = f.n;  //Duo_Tai.java:52: 错误: 找不到符号
            System.out.println( n );
            */
        //--------------------方法------------------------------

            //父类有的 子类没有的 静态方法
                f.m6();  //输出 父类的 静态方法

            //父类有的 子类也有的 静态方法
                f.m3();  //输出 父类的 静态方法

            //父类有的 子类没有的 成员方法
                f.m2();  //输出 父类的 成员方法

            //父类有的 子类也有的 成员方法
                f.m1();  //输出 父类的 成员方法
            /*
            //父类没有 子类有的 静态方法   为什么报错?为什么不去调用子类的?
                f.m5();  //Duo_Tai.java:68: 错误: 找不到符号

            //父类没有 子类有的 成员方法   为什么报错?为什么不去调用子类的?
                f.m4();  //Duo_Tai.java:71: 错误: 找不到符号
            */
//----------------------------------------------------------------------           

        //第二种 直接实例化多态 子类引用 是子类的对象
        Zi_Lei z = new Zi_Lei();

         //--------------------变量------------------------------

            //父类有的 子类没有的 静态变量
                int i1 = z.i;  // 输出 父类 的 静态变量
                System.out.println( i1 ); // 为什么子类没有 不会报错?而是去调用父类的

            //父类有的 子类也有的 静态变量
                int a1 = z.a;  // 输出 子类 的 静态变量
                System.out.println( a1 );

            //父类有的 子类没有的 成员变量
                int j1 = z.j;  // 输出 父类 的 成员变量
                System.out.println( j1 );

            //父类有的 子类也有的 成员变量
                int b1 = z.b;  // 输出 子类 的 成员变量
                System.out.println( b1 );
            //父类没有 子类有的 静态变量
                int m1 = z.m;  // 输出 子类 的 静态变量
                System.out.println( m1 ); //为什么父类没有 不会报错?

            //父类没有 子类有的 成员变量
                int n1 = z.n;  // 输出 子类 的 成员变量
                System.out.println( n1 );

        //--------------------方法------------------------------

            //父类有的 子类没有的 静态方法
                z.m6();  //输出 父类的 静态方法 为什么没有报错?而且去调用父类的了静态方法

            //父类有的 子类也有的 静态方法
                z.m3();  //输出 子类的 静态方法

            //父类有的 子类没有的 成员方法
                z.m2();  // 输出 父类的 成员方法 为什么没有报错?而且去调用父类的成员方法

            //父类有的 子类也有的 成员方法
                z.m1();  //输出 子类的 成员方法 为什么?!!!!☆☆☆

            //父类没有 子类有的 静态方法
                z.m5();  //输出 子类的 静态方法

            //父类没有 子类有的 成员方法
                z.m4();  //输出 子类的 成员方法
    }
}
class Fu_Lei{//声明一个父类
    static int i = 100;//静态变量 父类的 子类没有的

    static int a = 1;//静态变量 子类也有的

    int j = 200;//成员变量 父类的 子类没有的

    int b = 2;//父类的 子类也有的

    public void m1(){//被覆写的成员变量(子类有的)
        System.out.println( "我是父类的成员方法," );
    }
    public void m2(){//没有被覆写的成员变量 (子类没有的)
        System.out.println( "我是父类的成员方法,没有被覆写的" );
    }
    public static void m3(){//静态方法 子类也有
        System.out.println( "我是父类的静态变量" );
    }
    public static void m6(){//子类没有的静态方法
        System.out.println( "子类没有的静态方法" );
    }
}

class Zi_Lei extends Fu_Lei{//声明一个子类  继承( extends )父类

    static int m = 3;//父类没有的静态变量

    int n = 8;//父类没有的成员变量

    static int a = 111;//父类也有的

    int b = 2222;//父类也有的

    public void m1(){//父类有的成员方法
         System.out.println( "我是子类,我覆写了父类的m1()成员方法" );
    }
    public void m4(){//父类没有的成员方法
         System.out.println( "我是子类,我这个方法,父类没有,是我自己的" );
    }
    public static void m3(){//父类有的静态方法
         System.out.println( "我是子类的静态方法,父类也有哦" );
    }
    public static void m5(){//父类没有的静态方法
         System.out.println( "我是子类的静态方法 , 父类没有," );
    }
}

转载于:https://www.cnblogs.com/xrmqbl/p/4735126.html

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

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

相关文章

mysql安装im,mysql安装记录

zip下载及安装教程:https://blog.csdn.net/qq_41307443/article/details/79839558我按照步骤操作遇到了一些问题记录一下:1 没有 ini ,文件,自己建立一个新的 .ini文件。自己的系统没显示后缀,我配置了一下;2 启动服务…

python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

标签:pattern div mat txt 保存 关于 json result with open关于正则表达式的更多用法,可参考链接:https://blog.csdn.net/weixin_40040404/article/details/81027081一、正则表达式:1.常用正则匹配:U…

Notification的学习,4.0前后的差别,和在设置声音的时候获取资源的uri方法

android 4.0 前后很多api都有了较大的差别,不多说现在学习下notification前后实现的差别,本文参考了 :http://my.oschina.net/ososchina/blog/353692;http://gundumw100.iteye.com/blog/1873318; http://blog.csdn.net…

标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯

蓝桥杯日期问题常考,java提供了日期类很方便;//日历类Calendar c Calendar.getInstance();  // 获取实例化对象Date date c.getTime();   // 日期类得到c的时间;SimpleDateFormat sdf new SimpleDateFormat("yyyy-mm-dd hh:mm:s…

前端学习(1598):ref转发

第一种方式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&…

PHP opencv Dlib,Face_Recognition

Face_Recognition使用Opencv和Dlib实现基于视频的人脸识别文件夹介绍1、Resources\pictures此文件夹下存放人脸保存结果2、Resources\video此文件夹下存放带标注视频保存结果3、Resources\faceS此文件夹下存放各个人物的图片&#xff0c;用于人脸库的建立4、Resources\featureD…

linux c截断文件

http://www.cnblogs.com/zhuxiongfeng/archive/2010/08/24/1807505.html转载于:https://www.cnblogs.com/jingzhishen/p/4745978.html

oracle dbra,资源供给:IO子系统之二

案例描述&#xff1a;某运营商的dbra备份系统&#xff0c;备份构建在vxvm和vxfs文件系统之上&#xff0c;串行更新的速度基本理想。由于无法达到更新目标&#xff0c;通过增加并行来增加IO写速度&#xff0c;结果并行度加大之后&#xff0c;iops快速下跌&#xff0c;io子系统无…

[Android]Android端ORM框架——RapidORM(v1.0)

以下内容为原创&#xff0c;欢迎转载&#xff0c;转载请注明 来自天天博客&#xff1a;http://www.cnblogs.com/tiantianbyconan/p/4748077.html Android上主流的ORM框架有很多&#xff0c;常用的有ORMLite、GreenDao等。 ORMLite&#xff1a; &#xff0d;优点&#xff1a;AP…

oracle代码实例,oracle存储过程代码实例

1、用来插入大量测试数据的存储过程CREATE OR REPLACE PROCEDURE INSERTAMOUNTTEST(ST_NUM IN NUMBER,ED_NUM IN NUMBER)ISBEGINdeclarei number;beginFOR i IN ST_NUM..ED_NUM LOOPINSERT INTO tb values(i,i,3,3,3,100,0);END LOOP;end;END;运行&…

Examining Open vSwitch Traffic Patterns

In this post, I want to provide some additional insight on how the use of Open vSwitch (OVS) affects—or doesn’t affect, in some cases—how a Linux host directs traffic through physical interfaces, OVS internal interfaces, and OVS bridges. This is somethi…

Docker 面临的安全隐患,我们该如何应对

【编者按】对比虚拟机&#xff0c;Docker 在体量等方面拥有显著的优势。然而&#xff0c;当 DevOps 享受 Docker 带来扩展性、资源利用率和弹性提升的同时&#xff0c;其所面临的安全隐患同样值得重视&#xff0c;近日 Chris Taschner 在 SEI 上撰文进行了总结。本文系 OneAPM …

oracle虑重语句,db基本语句(oracle)

一. SQL分类DDL&#xff1a;数据定义语言(Data Definition Language)DML&#xff1a;数据操纵语言(Data Manipulation Language)TCL&#xff1a;事务控制语言(Transaction Control Language)DQL&#xff1a;数据查询语言(Data Query Language)DCL&#xff1a;数据控制语言(Data…

Plist文件和字典转模型

模型与字典 1. 用模型取代字典的好处 使用字典的坏处 编译器没有自动提醒的功能,需要手敲key如果写错了编译器也不会报错2. 模型概念 概念 专门用来存放数据的对象特点 一般继承自NSObject在.h文件中声明一些用来存放数据的属性注释 //单行注释/ /多行注释/* /文档注释,调用属性…

oracle job 与存储过程,应用oracle job和存储过程

每月新增数据百万多条&#xff0c;需要定期处理2个主要数据表(test_ad,test_pd)&#xff0c;移动非当月数据到历史表中保存数据操作存储过程如下&#xff1a;MYPROC.prccreate or replace procedure MYPROC isTableName_AD char(13);TableName_PD char(13);tmp_str varchar2(10…

Oracle从小白到大牛的刷题之路(建议收藏学习)

目录 前言 数据表结构 数据库文件&#xff08;按照顺序导入&#xff09; 1基本SQL-SELECT 1.1基本SQL-SELECT语句笔记 1.2 基本SQL-SELECT语句练习 2过滤和排序数据 2.1过滤和排序数据笔记 2.2过滤和排序数据练习 3单行函数 3.1单行函数笔记 3.2单行函数练习 4多表…