码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——Java基础---面向对象之继承

时间:2015-11-29 19:26:21      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

                         ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!                                                                                        面向对象之继承

 :继承(extends)

      (1)继承的体系结构:就是对要描述的事物进行不断的向上抽取,就出现了体系结构。

                                要了解这个体系结构中最共性的内容,就看最顶层的类。

                                要使用这个体系的功能,就用最底层的类创建对象。

      (2)继承的好处:

            A:继承的出现,提高了代码的复用性。

            B:继承的出现,让类与类之间产生了关系,extends来表示,这个关系的出现,为后面我们讲面向对象的第三个特点多态打下了基础。

      (3)特点

            Ajava只支持单继承(其实确切的说是java对多继承进行了优化,避免了安全问题)

            Bjava支持多重()继承。

      (4)注意:

            A:子类可以直接访问父类中的非私有的属性和行为。

            B:不要仅为了获取其他类中部分功能而去继承。

            C:类与类之间要有所属( " is a " )关系,xx1xx2的一种。

     

          如何判断AB是否有继承关系?

              A如果继承B,那么就可以说AB的一种。

 

:继承后子父类之间成员的关系

    (1)成员变量

 1 class Fu{
 2 
 3 int num = 5;
 4 
 5 }
 6 
 7  
 8 
 9 class Zi extends Fu{
10 
11 int num = 20;
12 
13  
14 
15  
16 
17 public void show() {
18 
19 int num = 30;
20 
21 System.out.println("num:"+num);
22 
23 //当局部变量和成员变量重名的时候用this来区分
24 
25 System.out.println("this num:"+this.num);
26 
27 //当子类和父类出现了同名变量,用super来区分
28 
29 System.out.println("father num:"+super.num);
30 
31 }
32 
33 }

 

   总结:在一个类中如果方法中的局部变量和方法外的成员变量重名,那么如果在方法内输出这变量,就是方法自己的变量里的值,想要区分要用this,加上this.就是输出成员变量的值

         在子父类中如果出现成员变量重名的时候,在子类输出会输出自己的变量里的值,想要区分要用super,加上super.就是输出父类里变量的值

 

      thissuper的区分:

         this代表本类对象的引用

         super本类对象父类的引用。

         this可以用于区分局部变量和成员变量同名的情况。

         super可以用于区分子类和父类成员变量同名的情况。

     一般,子类中不会出现和父类同名的成员变量。面试可能问到。

 

(2)成员方法

 

 1 class Fu {
 2 
 3 public void show() {
 4 
 5 System.out.println("fu show");
 6 
 7 }
 8 
 9 public void method() {}
10 
11 }
12 
13  
14 
15 class Zi extends Fu{
16 
17  
18 
19 public void show(){
20 
21  
22 
23 System.out.println("zi show");
24 
25 }
26 
27 }

 

子类中存在和父类成员方法同名的这种现象,叫做重写,复写,覆盖。

重写(override)和重载(overload)的区别:

重载的特点:

     1, 在同一类中。

    2, 方法名相同,参数列表不同。

重写的特点:

     1,要有继承关系。在子父类中

     2,方法的声明相同。(方法名和参数列表都相同)

     3,覆盖时,子类方法权限一定要大于等于父类方法权限

父类的权限不能是私有的

    静态只能覆盖静态。

 

(3)构造方法

 

 1 class Fu{
 2 
 3  
 4 
 5 Fu(){}
 6 
 7  
 8 
 9 Fu(int age){
10 
11 System.out.println("father age:"+age);
12 
13 }
14 
15 }
16 
17  
18 
19 class Zi extends Fu{
20 
21 Zi(){
22 
23 this(40);
24 
25 System.out.println("son");
26 
27 }
28 
29  
30 
31 Zi(int age){
32 
33 super();
34 
35 System.out.println("son age:"+age);
36 
37 }
38 
39 }
40 
41  
42 
43 Zi z = new Zi();  
44 
45  
46 
47 Zi z = new Zi(30);

 

 

总结:子类中所有的构造方法默认都会访问父类中空参数的构造方法。

    因为每一个构造方法的第一行都有一条默认的语句super();

 

      当父类中没有空参数的构造方法时,子类的构造函数必须通过this

      或者super语句指定要访问的构造方法。或者手动提供无参构造方法。

 

      this(...):调用本类中的构造方法

      super(...):调用父类中的构造方法

 

构造方法用于创建对象,并进行初始化.建议如果你写了有参的构造函数,也要把空参的构造函数再手动加上

否则你定义了有参的构造函数,空参的系统就不会再给了

你这样创建对象的时候就会报错Person p = new Person();//这句话是会去找空参的构造函数

 

 1  class Person{
 2 
 3 Person(){}
 4 
 5  
 6 
 7 Person(int age){
 8 
 9 this.age = age;
10 
11 }
12 
13  
14 
15 Person(int age,String name){
16 
17 this(age);
18 
19 //this.age = age;
20 
21 this.name = name;
22 
23 }
24 
25  }
26 
27  
28 
29       //Person p =new Person();  //系统默认给出无参构造
30 
31  
32 
33       //当你手动给出构造方法后,系统就不会再给出默认的空的构造方法。
34 
35  
36 
37  
38 
39       手动无参数,如果你想给属性赋值或者做一些初始化,无参你别删不就行了吗。
40 
41 class Demo{
42 
43 private String name;
44 
45 Demo(){}
46 
47  
48 
49 public void setName(String name){
50 
51 this.name = name;
52 
53 }
54 
55  
56 
57 public String getName(){
58 
59 return name;
60 
61 }
62 
63 }
64 
65  

 

                                            -----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

黑马程序员——Java基础---面向对象之继承

标签:

原文地址:http://www.cnblogs.com/hmchengxuyuan/p/5000593.html

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