继承1

Posted 安然罒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承1相关的知识,希望对你有一定的参考价值。

一.super关键字

    子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。但是,如果子类中声明的成员变量与父类的成员变量同名,则子类不能继承父类的成员变量,此时称子类的成员变量隐藏了父类的成员变量。如果子类中声明的成员方法与父类的成员方法同名,并且方法的返回值及参数个数和类型也相同,则子类不能继承父类的成员方法,此时称子类的成员方法重写了父类的成员方法。这时,如果想在子类中访问父类中被子类隐藏的成员方法或变量,就可以使用super关键字。

    super关键字主要有以下两种用途:

     1.调用父类的构造方法;

        子类可以调用由父类声明的构造方法。但必须在子类的构造方法中使用super关键字来调用。

        语法格式为:    super([参数列表]);

        如果父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。

     2.在子类的构造方法里显式调用被隐藏的父类的构造方法,注意调用语句必须在第一行。

        如果想在子类中操作父类中被隐藏的成员变量和被重写的成员方法,也可以使用super关键字。

        语法格式为:    super.成员变量名

                             super.成员方法名([参数列表])

二.转型

    1.向上转型

       子类转成父类;

       特点:

               (1)不能调用子类的特有的成员

               (2)可以调用父类的成员

               (3)如果子类重写了,就调用子类的  

    2.向下转型

        父类转成子类;

        特点:

              (1)需要强制转换(子类的类型)

              (2)一般情况是先有向上转型,再有向下转型

              (3)常用方式:先向上转成Object,再向下转型;类似  泛型。

 

父子类:

 1 package org.hanqi.pn0120;
 2 
 3 public class Father {
 4 
 5     
 6     private String name;
 7     
 8     private int age;
 9 
10     public String getName() {
11         return name;
12     }
13 
14     public void setName(String name) {
15         this.name = name;
16     }
17 
18     public int getAge() {
19         return age;
20     }
21 
22     public void setAge(int age) {
23         this.age = age;
24     }
25     
26 //    public Father()
27 //    {
28 //        System.out.println("父亲的构造方法");
29 //    }
30     
31     public  Father(String name)
32     {
33         System.out.println("父亲的有参的构造方法");
34         
35         this.name=name;
36     }
37     //工作
38     public void work()
39     {
40         System.out.println("我劳动我光荣");
41     }
42 }
Father
 1 package org.hanqi.pn0120;
 2 
 3 public class Son extends Father {
 4     
 5       //Object a;所说类的父类
 6     
 7       public Son()
 8       {
 9 //          System.out.println("子类的构造方法");
10 
11           //super 表示父类
12           super("儿子");
13           
14           System.out.println("子类的构造方法");
15       }
16       
17       public void sing()
18       {
19           System.out.println("我喜欢唱歌");
20       }
21       
22       //覆盖(重写)
23       public void work()
24       {
25           //调用父类的方法
26           //super.work();
27           
28 //          System.out.println("我不喜欢上班,我要去参加海选");
29           
30           System.out.println("我边上班边练歌");
31       }
32       
33       public static Object getDate(int i)
34       {
35           Object rtn=null;
36           
37           //获取数据
38           if(i==1)
39           {
40           //1  father
41           
42           Father  f=new Father("向上转型的父类");
43           
44           //向上
45           rtn=f;
46           }
47           else
48           {
49           //2 Son
50           Son s=new Son();
51           
52           rtn=s;
53           }
54           
55           return  rtn;
56       }
57  
58       
59 }
Son
 1 package org.hanqi.pn0120;
 2 
 3 public class TestJiCheng {
 4 
 5     public static void main(String[] args) {
 6         
 7         //
 8         Father f=new Father("父亲");
 9         
10 //        f.setName("父亲");
11         
12         f.setAge(50);
13         
14         System.out.println("名字是 "+  f.getName()+"  年龄是 "+  f.getAge());
15         
16         f.work();
17         
18         System.out.println();
19         
20         Son s=new Son();
21         
22 //        s.setName("儿子");
23         
24         s.setAge(20);
25         
26         System.out.println("名字是 "+s.getName()+"  年龄是 "+  s.getAge());
27         
28         s.work();
29         
30         s.sing();
31         
32         System.out.println();
33         
34         //转型
35         //向上转型  子类转成父类
36         Father f1=new Son();
37         
38         System.out.println("名字是 "+s.getName());
39         
40         f1.work();//如果被子类重写了,调用子类的方法
41         
42         //f1.sing
43         
44         System.out.println("向下转型");
45         
46         
47         //向下转型  父类转成子类
48         //Son s1=(Son) new  Father("父亲");
49         
50         Son s1=(Son) f1;
51         
52         s1.work();
53         
54         System.out.println();
55         
56         Father f2=(Father) Son.getDate(1);
57         
58         f2.work();
59         
60     
61         
62         
63 
64     }
65 
66 }
TestJiCheng

 

 

以上是关于继承1的主要内容,如果未能解决你的问题,请参考以下文章

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

多线程 Thread 线程同步 synchronized

Flask之模板之宏继承包含

java中封装,继承,多态,接口学习总结

php如何实现多继承?

如何覆盖继承的嵌套类中存在的虚拟方法