父类引用指向子类对象 灰太狼 2022-05-09 08:40 229阅读 0赞 最近学习装饰者模式的时候经常用到这个概念: 假如我们有一个父类Coffee 还有一个它的子类Suger那么我们将 Coffee coffee=new suger()就叫做父类引用指向子类对象; 总结一下它的特点吧: 1.子类suger对于父类的函数重写当使用父类coffee的时候会使用重写过后的函数 2.子类对于父类的重载函数使用父类引用的时候不能用,也就是只能用到父类引用里面定义有的函数 3.子类对于父类里面的变量假如重新赋值的话使用父类引用指向子类对象的话,coffee里面的变量也会变 还有就是再顺带总结一下父类以及子类的强制类型转换:(对于接口的操作与继承的关系是一样的) \*父类强制转换成子类在编译的时候不会报错但是运行的时候回抛出异常不能进行类型转换 \* 在内存层面就是父类的内存空间小不能转化成内存空间更大的子类 \* 但是子类可以转化成内存小的父类,转化是指的 大的部分也就是自己加上的方法不能用,但是还可以再 \* 从父类转化成子类,此时就可以使用子类的方法了 下面就以代码的形式做一下总结: //先定义一个接口 package test1; public interface Coffee { public int price=12; public void func1(); public void func2(); } //================定义父类 package test1; public class Suger implements Coffee { private int price2=2; private int o=33; private int weight2=4; @Override public void func1() { System.out.println("func1"); } @Override public void func2() { System.out.println("price是"+price2+" weight是"+weight2); } public void func3() { System.out.println("func3"); } public static void main(String[] args) { Coffee coff=new Suger();//接口亦可以定义成父类引用的形式 在装饰者模式里面用到很多 Suger sug=new Suger(); Coffee coff2=(Coffee)sug; coff2.func1(); Suger sug2=(Suger)coff2; sug2.func2(); System.out.println("========上面是对于强制类型转换的操作"); //接口的操作与继承的操作在这里都一样 sug.func2(); sug.func3(); coff.func1(); //coff.func3(); } } //========================定义子类============================================= package test1; public class Test extends Suger { private int price2=5; private int weight2=6; @Override public void func1() { super.func1(); } @Override public void func2() { System.out.println("price是"+price2+" weight是"+weight2); } //重载 public void func3(int i) { System.out.println(i); } public void func4() { System.out.println("func4"); } public static void main(String[] args) { //==========子类强制转换成父类对象还可以强制转换回子类对象 Test test=new Test(); Suger suger=(Suger)test; //suger.func4();// 强转过后子类独有的方法不能用了 Test test2=(Test)suger; test2.func4(); System.out.println("========================================"); /* * 父类强制转换成子类在编译的时候不会报错但是运行的时候回抛出异常不能进行类型转换 * 在内存层面就是父类的内存空间小不能转化成内存空间更大的子类 * 但是子类可以转化成内存小的父类,转化是指的 大的部分也就是自己加上的方法不能用,但是还可以再 * 从父类转化成子类,此时就可以使用子类的方法了 * Exception in thread "main" func4 java.lang.ClassCastException: test1.Suger cannot be cast to test1.Test at test1.Test.main(Test.java:39) */ //Suger suger11=new Suger(); //Test test3=(Test)suger11; //Suger suger12=(Suger)test3; //test3.func4(); //suger11.func4();错误 Suger sug=new Test(); Test tes=new Test(); sug.func1(); sug.func2();//方法二进行过重载 sug.func3(); //sug.func3(666);错误因为在父类里面没有定义 //sug.func4(); System.out.println("============================tes==========================================="); tes.func1(); tes.func2(); tes.func3(100000); tes.func4(); //System.out.println(o);//private不可见 } } 输出结果: 父类Suger: func1 price是2 weight是4 ========上面是对于强制类型转换的操作 price是2 weight是4 func3 func1 子类Test: func4 ======================================== func1 price是5 weight是6 func3 ============================tes=========================================== func1 price是5 weight是6 100000 func4
相关 多态应用:父类引用子类对象的常见问题 在Java等面向对象编程语言中,多态是一种重要的特性。当父类引用子类对象时,可能会遇到以下几个问题: 1. **类型不匹配**: 当父类引用子类对象时,如果子类对象不是 布满荆棘的人生/ 2024年09月19日 04:15/ 0 赞/ 3 阅读
相关 多态实现挑战:在Java中,如何保证父类引用指向子类实例? 在Java中,通过以下方式可以保证父类引用指向子类实例: 1. **继承(Inheritance)**: 父类(Superclass)定义了一些方法和属性,并将它们声明 妖狐艹你老母/ 2024年09月10日 08:48/ 0 赞/ 20 阅读
相关 父类类型的引用指向子类的对象 父类类型的引用指向子类的对象,注意以下几点: 一、该引用只能调用父类中定义的方法和变量; 二、如果子类中重写了父类中的一个非静态方法,那么在调用这个方法的时候,将会调用 秒速五厘米/ 2024年03月31日 10:15/ 0 赞/ 46 阅读
相关 【C++】继承 ⑥ ( 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 ) 文章目录 一、public 公有继承 - 示例分析 1、类型兼容性原则 2、类型兼容性原则应用场景 二、类型兼容性原则 - 示例分析 青旅半醒/ 2024年03月26日 23:56/ 0 赞/ 44 阅读
相关 父类引用指向子类对象 // // Father.h // OC基础学习 // // Created by 麦子 on 15/6/7. // C 待我称王封你为后i/ 2022年08月05日 05:10/ 0 赞/ 155 阅读
相关 父类引用指向子类对象 父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。 Animal ゞ 浴缸里的玫瑰/ 2022年08月05日 05:04/ 0 赞/ 148 阅读
相关 父类引用指向子类对象是什么意思 在java的多态中,经常会看到父类的引用对象指向子类的对象,一开始很迷茫,因为按照之前所学的知识,父类的引用对象指向自身对象或者子类的引用对象指向自身对象都不难理解,因此为 痛定思痛。/ 2022年05月16日 12:45/ 0 赞/ 203 阅读
相关 父类引用指向子类对象 最近学习装饰者模式的时候经常用到这个概念: 假如我们有一个父类Coffee 还有一个它的子类Suger那么我们将 Coffee coffee=new suger()就叫做父类 灰太狼/ 2022年05月09日 08:40/ 0 赞/ 230 阅读
相关 向上转型:父类的引用指向子类的对象 package 向上转型; /\向上转型:子类的对象赋值给父类的引用(父类的引用所指向的属性是父类的属性) ,如此就可调用父类类的方法,而不可以调用自身的方法,但如果父 蔚落/ 2022年04月16日 00:44/ 0 赞/ 175 阅读
还没有评论,来说两句吧...