/**
* 里氏替换原则 :
* 能使用父类的地方,一定可以使用子类
* 什么是多态 :
* 父类的引用,指向子类的对象
* 多态的前提条件 :
* 有继承关系的两个类
* 多态的目的 :
* ☆☆☆ 代码的重用
* 多态发什么在什么时候 :
* 赋值的时候
*
* !!!!!!!!! 多态中的 ☆☆☆ 覆写 是特指的 成员方法!!!!!!!!!
* 什么是覆写 :
* 就是在子类有个和父类相同的方法 : 方法名 , 参数列表 , 返回值类型 (和修饰符列表没关系)
* 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 = ;//静态变量 父类的 子类没有的 static int a = ;//静态变量 子类也有的 int j = ;//成员变量 父类的 子类没有的 int b = ;//父类的 子类也有的 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 = ;//父类没有的静态变量 int n = ;//父类没有的成员变量 static int a = ;//父类也有的 int b = ;//父类也有的 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( "我是子类的静态方法 , 父类没有," );
}
}

JavaSE复习日记 : 多态的更多相关文章

  1. JavaSE复习日记 : 抽象类

    /* * 抽象类 * 抽象: * 面向对象的三大核心思想; * 封装: 封装,ppp是封装的一部分 * 继承; * 多态: 父类的引用指向子类的对象 * 引用: 是指一个引用型变量 * 有哪些变量? ...

  2. JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写

    /* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...

  3. JavaSE复习日记 : 算是个小前言吧

    /* * Java也学了好久了,抽个时间整理了一下课堂笔记,也有些是我刚开始学会犯的一些错误.在这里浅谈一下JavaSE的基础内容,对我来说也是一种不错的复习方式. * * 那好,对于初学者来说,学习 ...

  4. JavaSE复习日记 : 方法的调用和方法的重载

    /* * 方法的调用和方法重载 */ /* * 什么是方法? * 方法就是一个有名字的代码段; * 方法的调用: * 在方法里调用另外一个方法里面的东西就是方法调用; * 或者可以认为"另外 ...

  5. JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)

    最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...

  6. JavaSE复习日记 : 接口

    /* * 接口 * 引用数据类型: * 类,接口,数组; * * 接口是一种引用数据类型,可以看作是一个特殊的类,它存在的目的是为了解决没有多重继承引起的功能弱的问题而设计的,一个类只能有一个父类,但 ...

  7. JavaSE复习日记 : java包机制

    这里是第一个文件,命名为JavaSE_01.java,我在这个文件里面声明了一个m1()方法,通过包机制,我将在另外一个文件夹里访问这个文件里的东西,确切的说是访问这个文件生成的一个class文件; ...

  8. JavaSE复习日记 : 实例化对象/构造方法和this关键字

    /* * 实例化对象/对象的构造方法/this关键字 */ /* * 实例化对象 * * 就是实例化某一个类; * 从不同角度去理解的话就是: * 1. 从人的认知角度: * 就是具体化某个东西; * ...

  9. JavaSE复习日记 : 递归函数

    /* * 递归函数 * 什么是递归? * 在一个方法的内部,对自身进行调用,又叫做递归调用 * * 递归和循环的编写都包括三部分: * 1. 初始值; * 2. 终止条件; * 3. 前进步长; * ...

随机推荐

  1. Git操作流水账

    一.关于Git Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计. 二.Git的环境配置 2.1 ...

  2. Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email

    Check SMTP Server Availability for ORA-29278 or ORA-29279 errors using UTL_SMTP to Send Email. (文档 I ...

  3. Quartz 2D - 图形上下文(Graphics Contexts)

    一个Graphics Context表示一个绘制目标.它包含绘制系统用于完成绘制指令的绘制参数和设备相关信息.Graphics Context定义了基本的绘制属性,如颜色.裁减区域.线条宽度和样式信息 ...

  4. 在IOS开发中,属性名为id的处理方法

    在.h 文件中定义属性名为id { int _id; } @property (nonatomic, assign) int id; 在.m 文件中用synthesize声明该属性,会自动生成get和 ...

  5. [springMVC]javax.servlet.jsp.JspTagException: Neither BindingResult nor plain target object for bean

    问题描述: 页面使用标签<form:form>进行提交时,出现[springMVC]javax.servlet.jsp.JspTagException: Neither BindingRe ...

  6. You have not agreed to the Xcode license.

    You have not agreed to the Xcode license. Before running the installer again please agree to the lic ...

  7. IE6下不能定义1px高度的容器和IE6 双边距

        (1)触发的条件---定义一个div,将容器的高度设置成1px (2)  编码得到的结果---在IE6浏览器中,容器的高度不是1px   而是18px (3)出现问题的原因---是因为IE6浏 ...

  8. MyEclipse数据库反向生成实体类

    MyEclipse数据库反向生成实体类 “计应134(实验班) 凌豪” 当我们在开发项目涉及到的表太多时,一个一个的写JAVA实体类很是费事.然而强大的MyEclipse为我们提供简便的方法:数据库反 ...

  9. Python 字符串格式化示例

    先看代码吧. #!/usr/bin/env python #-*- coding: utf-8 -*- __author__ = 'jiang' __creattime__ = '2015/10/31 ...

  10. wget www.baidu.com执行流程分析

    下载网页的关键函数: main.c(main) b 1394 url_parse:解析url,获取url相关信息,返回结构体 struct url 的指针,存于 url_parsed retrieve ...