码迷,mamicode.com
首页 > 其他好文 > 详细

多态、向上转型、向下转型

时间:2019-09-05 23:40:33      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:ima   ceo   lan   覆盖   his   变量   eof   animal   cep   

 1 package cn.learn.Polymorphism;
 2 
 3 public class Fu {
 4     public void method(){
 5         System.out.println(",父类子类都有的方法,父类方法运行");
 6 
 7     }
 8     public void methodFu(){
 9         System.out.println("父类独有,子类没有的的方法运行");
10     }
11 
12     int num=10;    //与子类成员变量重名的情况
13 }
 1 package cn.learn.Polymorphism;
 2 
 3 public class Zi extends Fu{
 4     public void method() {
 5 
 6         System.out.println("父类子类都有的方法,子类方法运行");
 7     }
 8     public void methodZi(){
 9         System.out.println("子类独有方法");
10     }
11     //成员变量不可覆盖重写
12     int num=20;    //与子类成员变量重名的情况
13 }
 1 package cn.learn.Polymorphism;
 2 /*
 3    多态是对象的多态
 4    代码中体现多态性:父类引用指向子类对象
 5     -
 6     对象的向上转型  eg:Animal animal = new Cat();
 7     从小范围转到大范围,安全,但有弊端,子类无法调用子类特有方法如下methodZi()
 8    父类名称 对象名   = new 子类名称();
 9    接口名称 实现类名 = new 实现名称();
10 
11    -
12    对象的向下转型(还原)子类名称 对象名=(子类名称)父类对象
13    注:子类对象要与new的相同,不能向下转型为其他父类对象
14    eg:
15    Fu obj = new Zi();
16    Zi obj = (Zi)obj2  错误,编译不报错,运行报错,抛出 java.lang.ClassCastException
17    Zi obj = (Zi)obj  正确
18    目的:使用Zi类中的特有方法
19 
20    优点:无论右边new的谁,左边调用仍然不变
21 
22  */
23 public class Polymorphism {
24     public static void main(String[] args) {
25         Fu obj =new Zi();  //向上转型
26         obj.method();    //子父同时存在,运行的是子类的,new的是谁就运行谁的
27         obj.methodFu();  //子类没有这个方法就在父类找
28 
29         //成员方法obj.methodZi()不能直接调用,向上转型弊端,需要向下还原
30         //可以判断下,格式:对象名 instanceof 类名称,返回值为Boolean
31         System.out.println(obj instanceof Zi);
32 
33         // 成员方法,多态中,new出的对象,编译在左,运行在右
34         // 成员变量,多态中,对象都看左类的成员变量
35         //如果不知道obj 向下还原成谁,可以用if(obj instanceof 类名称)进行判断再转型
36         ((Zi) obj).methodZi(); //正确 ,向下转型还原
37 
38 
39         /*
40         成员变量访问的两种方式:
41         1.直接访问:等号左边是谁就是谁的成员变量,没有则向上查找
42         2.间接访问:通过成员方法进行访问,该方法属于谁,就用谁。没有同上
43          */
44         System.out.println(obj.num);   //调用的是父类的num 10,不报错这是与成员方法取得区别,向上转型
45         System.out.println(((Zi) obj).num);   //调用的是子类的num 20   向下转型
46 
47     }
48 }

 

多态、向上转型、向下转型

标签:ima   ceo   lan   覆盖   his   变量   eof   animal   cep   

原文地址:https://www.cnblogs.com/huxiaobai/p/11470286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!