好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

面向对象高级(04)-对象的多态性,以及对 象多态性在抽象类和接口中的实际应用.docx

27页
  • 卖家[上传人]:qt****68
  • 文档编号:43599759
  • 上传时间:2018-06-07
  • 文档格式:DOCX
  • 文档大小:542.56KB
  • / 27 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 16.16. 面向对象高级(面向对象高级(0404)) 本季要点:对象的都态性、instanceof 关键字、Object 类本季为 Java 基础中面向对象的重要一季,讲解了对象的多态性,以及对 象多态性在抽象类和接口中的实际应用blog: [零基础学 JAVA]Java SE 面向对象部分-16.面向对象高级(04) 2009-01-15上季内容回顾:上季内容回顾:1 1、、finalfinal 关键字关键字 · 修饰类不能被继承 · 修饰方法不能被覆写 · 修饰的变量就是一个常量,全局常量(public static final) 2 2、抽象类和接口、抽象类和接口 · 抽象类:只包含一个抽象方法的类,抽象方法只需声明而不需要实现,必须有子类 · 接口:只包含抽象方法和全局常量的类——接口,也是必须有子类在实际中一个类很少会去继承一个已经完全实现好的类,基本上都是继承抽象类和实现接口本季主要知识点:本季主要知识点:1 1、对象的多态性、对象的多态性 2 2、、instanceofinstanceof 关键字关键字 3 3、、ObjectObject 类类对象的多态性对象的多态性注意点: 为了清楚的阐述出概念,现在先使用普通类的继承关系。

      向上转型:class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo01 { public static void main(String args[]) { B b = new B(); A a = new A(); b.fun1(); a.fun2(); b.fun3(); } }对象多态性体现在对象相互转型上面哈~class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo02 { public static void main(String args[]) { //声明一个父类对象 A a = null; //new B()是子类对象向父类对象转换 a = new B(); a.fun1(); } } 现在我们来看下 a.fun1()调用的是哪个类的方法哈~class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo02 { public static void main(String args[]) { //声明一个父类对象 A a = null; //new B()是子类对象向父类对象转换 //子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法 a = new B(); a.fun1(); a.fun2(); } }子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法,这就是对象的向上转型哈~向下转型:class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo03 { public static void main(String args[]) { //声明一个父类对象 A a = null; //new B()是子类对象向父类对象转换 //子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法 a = new B(); a.fun1(); a.fun2(); a.fun3(); } }现在我们来看下能否调用 a.fun3()哈~程序提示找不到 fun3()方法,A 类中没有 fun3()方法哈,如果我们一定要调用的话,我们就要使用向下转型哈~class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo03 { public static void main(String args[]) { //声明一个父类对象 A a = null; //new B()是子类对象向父类对象转换 //子类对象向父类对象转型之后,所调用的方法一定是被覆写过的方法 a = new B(); //可以进行向下转型,需要使用强制性手段哈~ B b = (B)a; b.fun3(); } }验证下效果:这就是对象向下转型哈~观察以下一种代码,检查下有没问题哈~:class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //现在我们不覆写 A 类中的 fun1()方法 public void funX() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo04 { public static void main(String args[]) { A a = new B(); a.fun1(); } }程序找不到 B 类中被覆写的 fun1()方法,所以去查找父类 A 中的 fun1()方法了哈~class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); } public void fun2() { //fun2 方法调用的是 fun1 方法 this.fun1(); } } class B extends A { //覆写 A 类中的 fun1()方法 public void fun1() { System.out.println(“B 类===>public void fun1()“); } public void fun3() { System.out.println(“B 类===>public void fun3()“); } } public class Demo04 { public static void main(String args[]) { A a = new A(); a.fun1(); } }现在对象实例化时没有子类哈,所以 a.fun1()调用的是父类 A 中本身的 fun1()方法如果现在我们要调用 fun3()方法呢?现在使用向下转型可以吗?class A { public void fun1() { System.out.println(“A 类===>public void fun1()“); 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.