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

    const * const在*左边,指向一个常量. * const const在*右边,指针是常量. 1 const int *p;//指向常量的指针,与下面一样 2 int const *p1;// ...

  2. AU3学习笔记

    目录 1. AU3是什么?能做什么? 2. 乱学AU3中的命令(语言相关)? 3. 通过简单示例学习AU3? 4. 正则表达式的学习(对大小写敏感) 5.对于GUI的相关学习 1.        AU ...

  3. SQLite使用报告

    SQLite简介 SQLite是遵守ACID的关联式数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目. 不像常见的客户-服务器范例,SQLite引擎不是个程 ...

  4. .NET,你忘记了么?(八)—— 从dynamic到特性误用 [转]

    1. 摘要 每个程序员都想写出漂亮的代码,但是什么是漂亮,这个我想每个人都有着自己的看法.那么我就说几种典型的想法: A. 写出别人看不懂的代码,让别人觉得很高深. B. 写出简短的代码 C. 用最新 ...

  5. 问题解决——Group Box控件遮挡其它控件

    转载请保持文章的完整性并显要地注明出处 本文链接:http://blog.csdn.net/wlsgzl/article/details/38042301 ====================== ...

  6. JS 精粹(一)

    先说说JS是容易被误解的语言的观点.从名字上来看,"Java"这似乎暗示着这门语言与Java的关系:好像这门语言是Java的子集,或比Java弱.但实际与Java并无关系,如果说非 ...

  7. Can't load IA 32-bit .dll on a AMD 64-bit platform

    在myeclipse中使用的,tomcat异常:java.lang.UnsatisfiedLinkError: D:\JAVA\ApacheTomcat\bin\tcnative-1.dll: Can ...

  8. poj1323--贪心算法

    题意:一群人打牌包括你,每人出一张牌,谁最大,谁就算赢一局,问你最少能赢几局? 给出人数N,每人的牌数M,及你的牌. 分析:1.这题需比较大小,就像我们打牌时要将牌排序以便出牌,显然要先将手上的牌进行 ...

  9. C++学习笔录2

    1.如果一个类要成为基类,那么它的成员变量声明成受保护的变量,既用关键字protected修饰. 2.处理共同继承产生的二义性:采用虚继承方式,当出现两个相同的成员时,编译器会自动删除其中一个.其方法 ...

  10. U3D学习使用笔记(二)

    1.在移动端www.texture使用时不能实时加载纹理,www.LoadImageIntoTexture使用没问题 2.public FaceFeature FaceFeatureData      ...