关于继承的一些小总结

继承:
关键字:extends
格式:
类A extends 类B
类A为父类  类B为子类
功用:
让类之间产生关系===》》多态
提高代码的复用性

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
注意:
切勿滥用继承,必须有所属关系
简单代码举例:

 1 class C
 2 {
 3     void demo1(){}
 4 }
 5 
 6 class B extends C
 7 {
 8     void demo2(){}
 9     //void demo1(){} B和A不必作此声明
10 }
11 
12 class A extends C
13 {
14     //void demo1(){}
15     void demo3(){}
16 }
View Code

A,B继承C的成员demo1()

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
java语言只支持单继承,不支持多继承(即一个类可以同时继承多个类)
功用:提高了代码的安全性,当多个父类中有相同的属性,子类调用执行哪个成为问题
简单代码举例:

 1 class C
 2 {
 3     void show()
 4     {
 5         System.out.println("C");l
 6     }
 7 }
 8 class B
 9 {
10     void show()
11     {
12         System.out.println("B");
13     }
14 }
15 class A extens B,C
16 {
17     A a = new A();
18     a.show();  //A该执行哪个show()?
19 }
View Code

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

java语言支持多层继承即A extends B, C extends A,
则C中同时具有A和B中的所有属性,是一个继承体系。
在具体调用的时候创建子类对象,
父类可能不能创建对象,而子类中还有特有的属性

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

覆盖(重写,成员函数具有的特性)
   概念:子类中的方法与父类中相同(类型,名称,参数,返回值),保留父类的功能定义
   改变父类的功能内容
注意:
   子类的权限必须大于父类的权限,才能覆盖
   静态的方法只能覆盖静态的方法
 重写可用于扩展:(简单代码)

 1 class A
 2 {
 3     void show()
 4     {
 5         System.out.println("A");
 6     }
 7 }
 8 
 9 class B extends A
10 {
11     void show()
12     {
13         super.show();
14         System.out.println("B");
15     }
16 }
View Code

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
子父类的构造函数
  在子类实例化时,子类的构造函数默认会调用父类的构造函数
  子类必须了解父类对对象初始化做了什么,因此在生成对象的时候子类必须先调用父类的构造方法,然后再调用自己的构造方法
简单代码:

 1 class A
 2 {
 3     A()
 4     {
 5         System.out.println("a");
 6     }
 7 }
 8 
 9 class B extends A
10 {
11     B()
12     {
13         super();    //此处是虚拟机默认添加
14         System.out.println("b");
15     }
16 }
View Code

注意:
  假如类B的定义如下:此时B中的构造方法B()不再访问父类构造方法,
  即this与super只能存在一个

 1 class A
 2 {
 3     A()
 4     {
 5         System.out.println("a");
 6     }
 7 
 8 }
 9 class B extends A
10 {
11     B()
12     {
13         this(3);
14         System.out.println("b");
15     }
16     B(int num)
17     {
18         //super();
19         System.out.println("B"+" "+num);
20     }
21 
22     public static void main(String[] args)
23     {
24         B b = new B();
25     }
26 }
View Code

输出结果:
    a
    B 3
    b
  即因为B中有this则B不再调用父类构造方法
  而是在调用B(int num)这个构造方法来调用父类的调用方法
否则输出结果为
    a
    B 3
    a
    b
结论:子类对象实例化时必然要调用父类的构造方法
注意:
  若A中没有空参数列表构造函数,则此时在子类B的构造方法中必须显示的调用A的构造方法
  否则编译错误

posted @ 2014-02-28 16:04  风痕影默  阅读(635)  评论(0编辑  收藏  举报
友情链接:极限BT